Java/Thread: diferenças entre revisões

[edição verificada][revisão pendente]
Conteúdo apagado Conteúdo adicionado
m <source> -> <syntaxhighlight> (phab:T237267)
 
Linha 8:
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>).
 
<sourcesyntaxhighlight lang="java" highlight="2">
public static void main(String... args) {
Thread t = Thread.currentThread();
Linha 15:
System.out.println("Nome: " + nome + ", id: " + id);
}
</syntaxhighlight>
</source>
Nome: main, id: 1
 
Linha 33:
O código que será executado por uma ''thread'' deve ser definido no método <code>void run()</code> da interface <code>[https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html java.lang.Runnable]</code>.
 
<sourcesyntaxhighlight lang="Java" highlight="1,4">
class Executavel implements Runnable {
 
Linha 41:
}
}
</syntaxhighlight>
</source>
 
Já que <code>Runnable</code> é uma interface funcional, é possível reescrever o código acima da seguinte forma.
 
<sourcesyntaxhighlight lang="Java" >
Runnable runnable = () -> System.out.println(Thread.currentThread());
</syntaxhighlight>
</source>
 
Uma vez que a classe <code>Thread</code> implementa <code>Runnable</code>, alternativamente é possível estender <code>Thread</code> e inserir o código em uma sobrescrita do método <code>void run()</code>.
<sourcesyntaxhighlight lang="Java" highlight="1,4">
class LinhaDeExecucao extends Thread {
 
Linha 58:
}
}
</syntaxhighlight>
</source>
 
===Instanciando a classe Thread===
Por meio de referência a <code>Runnable</code>.
<sourcesyntaxhighlight lang="Java" highlight="5-6">
class EstudandoThreads {
 
Linha 71:
}
}
</syntaxhighlight>
</source>
 
Por meio de instância de subclasse de <code>Thread</code>.
<sourcesyntaxhighlight lang="Java" highlight="4-5,14">
class EstudandoThreads {
 
Linha 96:
}
}
</syntaxhighlight>
</source>
 
O parâmetro <code>String name</code>, encontrado nos construtores <code>Thread(String name)</code> e <code>Thread(Runnable target, 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.
 
===Executando a thread===
<sourcesyntaxhighlight lang="Java" line start=3 highlight="6">
class EstudandoThreads {
 
Linha 110:
}
}
</syntaxhighlight>
</source>
Thread[Thread-0,5,main]
 
Linha 122:
 
Então evite os seguintes construtores da classe <code>Thread</code>.
<sourcesyntaxhighlight lang="Java">
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, String name)
</syntaxhighlight>
</source>
Bem como os métodos abaixo.
<sourcesyntaxhighlight lang="Java">
static int enumerate(Thread[] tarray)
static int activeCount()
final ThreadGroup getThreadGroup()
 
</syntaxhighlight>
</source>
 
==Métodos estáticos==
<sourcesyntaxhighlight lang="java">
dumpStack()
getAllStackTraces()
Linha 146:
sleep(long millis, int nanos)
yield()
</syntaxhighlight>
</source>
 
==Métodos de instância==
<sourcesyntaxhighlight lang="java">
checkAccess()
countStackFrames()
Linha 168:
setPriority(int newPriority)
setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
</syntaxhighlight>
</source>
 
{{AutoCat}}