Java/Thread: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Linha 1: Linha 1:
Cada objeto gerado pela classe <code>Thread</code> representa um segmento de execução.
Cada objeto gerado pela classe <code>Thread</code> cria uma [[w: Thread_(ciência_da_computação) | ''thread'']] também conhecida como linha de execução em línguas lusófonas.


Cada um desses segmentos de execução podem ser executados em paralelo, possibilitando à aplicação a execução de instruções relativamente simultâneas.
Cada uma dessas linhas de execução podem ser executadas em paralelo, possibilitando à aplicação a execução de instruções relativamente simultâneas.


==A thread main==
==A thread main==
Toda aplicação tem ao menos uma ''thread'' em tempo de execução: a ''thread'' <code>main</code>.
Toda aplicação tem ao menos uma ''thread'' em tempo de execução: a ''thread'' '''main'''.


A ''thread'' <code>main</code> é responsável por executar o código no método inicial <code>public static void main(String... args)</code>, ''thread'' que é criada pela '''JVM''' ao iniciar uma aplicação Java.
A ''thread'' <code>main</code> é responsável por executar o código no método inicial <code>public static void main(String... args)</code>, ''thread'' que é criada pela '''JVM''' ao iniciar uma aplicação Java.


Para referenciar a ''thread'' '''main''', basta utilizar o método estático <code>currentThread()</code>.
Para obter uma referência à ''thread'' '''main''', basta utilizar o método estático <code>currentThread()</code>.
<source lang="java">
<source lang="java" highlight="1">
public static void main(String... args) {
public static void main(String... args) {
Thread t = Thread.currentThread();
Thread t = Thread.currentThread();

Revisão das 15h10min de 13 de julho de 2016

Cada objeto gerado pela classe Thread cria uma thread também conhecida como linha de execução em línguas lusófonas.

Cada uma dessas linhas de execução podem ser executadas em paralelo, possibilitando à aplicação a execução de instruções relativamente simultâneas.

A thread main

Toda aplicação tem ao menos uma thread em tempo de execução: a thread main.

A thread main é responsável por executar o código no método inicial public static void main(String... args), thread que é criada pela JVM ao iniciar uma aplicação Java.

Para obter uma referência à thread main, basta utilizar o método estático currentThread().

public static void main(String... args) {
    Thread t = Thread.currentThread();
    System.out.println("Nome: " + t.getName() + " id: " + t.getId());
}

Saída

Nome: main id: 1

getName() foi utilizado para obter o nome da thread, complementarmente há o método setName(String) que altera o nome da thread.

getId() devolve o valor numérico automaticamente atribuído quando a thread é criada. Esse valor é único e não é reutilizado quando a thread morre.

Criando threads

Abaixo estão os construtores para a classe Thread.

Thread()
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Thread(ThreadGroup group, String name)

O código executado por uma thread pode ser definido de duas formas: através de subclasse da Thread ou da implementação da interface Runnable.

Os construtores que não especificam variável Runnable em sua lista de parâmetros devem ser chamados em uma subclasse.

A interface Runnable

A interface funcional Runnable especifica o método void run(). Esse método deverá conter o código a ser executado por uma thread.

Métodos estáticos

activeCount()
currentThread()
dumpStack()
enumerate(Thread[] tarray)
getAllStackTraces()
getDefaultUncaughtExceptionHandler()
holdsLock(Object obj)
interrupted()
setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
sleep(long millis)
sleep(long millis, int nanos)
yield()

Métodos de instância

checkAccess()
countStackFrames()
getContextClassLoader()
getId()
getName()
getPriority()
getState()
getThreadGroup()
getUncaughtExceptionHandler()
interrupt()
isAlive()
isDaemon()
isInterrupted()
join()
join(long millis)
join(long millis, int nanos)
run()
setContextClassLoader(ClassLoader cl)
setDaemon(boolean on)
setName(String name)
setPriority(int newPriority)
setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
start()