Java/Thread: diferenças entre revisões
[edição verificada] | [edição verificada] |
Linha 25: | Linha 25: | ||
==Criando threads== |
==Criando threads== |
||
Abaixo estão os construtores para a classe <code>Thread</code>. |
|||
<source lang="java"> |
<source lang="java"> |
||
Linha 32: | Linha 31: | ||
Thread(Runnable target, String name) |
Thread(Runnable target, String name) |
||
Thread(String name) |
Thread(String name) |
||
⚫ | |||
⚫ | |||
⚫ | |||
</source> |
</source> |
||
Linha 60: | Linha 56: | ||
<code>String name</code> 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. |
<code>String name</code> 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. |
||
<source lang="Java"> |
|||
⚫ | |||
⚫ | |||
⚫ | |||
</source> |
|||
<code>[https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html java.lang.ThreadGroup] group</code> inclui a ''thread'' em um grupo de ''threads''. A utilização de <code>ThreadGroup</code> deve ser evitada<ref>Item 73 - JOSHUA, Bloch. Effective Java. 2.ª edição, 2009. </ref>. |
<code>[https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html java.lang.ThreadGroup] group</code> inclui a ''thread'' em um grupo de ''threads''. A utilização de <code>ThreadGroup</code> deve ser evitada<ref>Item 73 - JOSHUA, Bloch. Effective Java. 2.ª edição, 2009. </ref>. |
Revisão das 17h35min de 21 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
Thread()
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(String name)
O código executado por uma thread pode ser definido de duas formas: através de subclasse da classe Thread
ou da implementação da interface java.lang.Runnable
. Em ambos os casos as instruções devem estar inseridas no corpo do método void run
.
Os construtores que não especificam em sua lista de parâmetros variável do tipo Runnable
devem ser chamados em uma subclasse de Thread
.
public class Segmento extends Thread {
public Segmento(String nome) {
super(nome);
}
@Override
public void run() {
// Código
}
}
Isso ocorre porque o método void run
de Thread
chama o método void run
de sua variável Runnable target
, caso target
não seja uma referência nula.
Na próxima seção será explicado o porquê de Runnable
ser uma escolha melhor que Thread
para definir o código a ser executado por uma 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.
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, String name)
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()
- ↑ Item 73 - JOSHUA, Bloch. Effective Java. 2.ª edição, 2009.