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
Etiquetas: Edição via dispositivo móvel Edição feita através do sítio móvel
Linha 6: Linha 6:
Toda aplicação tem ao menos uma ''thread'', não-''daemon'', em tempo de execução: a ''thread'' <code>main</code>.
Toda aplicação tem ao menos uma ''thread'', não-''daemon'', em tempo de execução: a ''thread'' <code>main</code>.


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>, criada automaticamente pela JVM quando uma aplicação é iniciada, é responsável por executar o código inicial da aplicação (comumente inserido no corpo do método <code>public static void main(String... args)</code>).


<source lang="java" highlight="2">
<source lang="java" highlight="2">
Linha 18: Linha 18:
Nome: main, id: 1
Nome: main, id: 1


<code>Thread Thread.currentThread()</code> devolve uma referência do objeto <code>Thread</code> que executa a chamada desse método. No código acima, foi devolvida uma referência à ''thread'' main.
<code>Thread Thread.currentThread()</code> devolve uma referência do objeto <code>Thread</code> correspondente à ''thread'' que executa a chamada desse método. No código acima, foi devolvida uma referência à ''thread'' main.


<code>String getName()</code> foi utilizado para obter o nome da ''thread'', complementarmente há o método <code> void setName(String)</code> que altera o nome da ''thread''.
<code>String getName()</code> foi utilizado para obter o nome da ''thread'', complementarmente há o método <code> void setName(String)</code> que altera o nome da ''thread''.

Revisão das 00h16min de 15 de julho de 2016

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

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, não-daemon, em tempo de execução: a thread main.

A thread main, criada automaticamente pela JVM quando uma aplicação é iniciada, é responsável por executar o código inicial da aplicação (comumente inserido no corpo do método public static void main(String... args)).

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

Thread Thread.currentThread() devolve uma referência do objeto Thread correspondente à thread que executa a chamada desse método. No código acima, foi devolvida uma referência à thread main.

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

long getId() devolve um long 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, String name)

Parâmetros possíveis

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 target em sua lista de parâmetros devem ser chamados em uma subclasse de Thread.

String name especifica um nome para a thread. Caso não especificado no construtor o nome da thread será criado automaticamente derivado do modelo Thread-0, onde 0 é um número incrementado a cada nova thread criada sem definição de nome.

java.lang.ThreadGroup group inclui a thread em um grupo de threads. A utilização de ThreadGroup deve ser evitada[1].

A interface Runnable

A interface funcional java.lang.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()
  1. Item 73 - JOSHUA, Bloch. Effective Java. 2.ª edição, 2009.