Académique Documents
Professionnel Documents
Culture Documents
Threads em Java
Thread Processo
Thread
GeraPDF instanciação
Implementação de uma
Thread
public class Programa implements Runnable {
private int id;
public void setId(int id) {
this.id = id;
}
@Override
public void run( ) {
for (int i = 0; i < 10000; i++) {
System.out.println("Programa " + id + " valor: " +
i);
}
}
}
Implementação de uma
Thread
public class Threads {
public static void main(String[] args) {
Thread t1 = new Thread(new Programa());
t1.start();
Thread
Classe A
referência
Programa
Runnable
Exercícios práticos
1) Crie a classe GeradorRelatorio, que
contém o código a ser executado por uma
thread:
Exercícios práticos
2) Implemente o código para Criação e
execução de uma Thread, usando um objeto
GeradorRelatorio:
Exercícios práticos
3) Altere o código de execução de thread,
desenvolvido no exercício anterior, incluindo
a mensagem final:
Resultado da execução
Por que a mensagem final aparece antes
da execução da Thread?
Thread == novo processo independente
Exercícios práticos
4) Crie a classe BarraDeProgresso, que será
executada por uma Thread, durante a
impressão do relatório:
Exercícios práticos
5) Agora, nossa aplicação deve imprimir o
relatório e exibir a barra, ao mesmo tempo:
Resultado da execução
Os processos concorrem por tempo de
execução no processador;
As regras de escalonamento definem o
tempo de execução de cada processo.
Escalonador e trocas de
contexto
É serviço do escalonador de
threads(scheduler) alternar o tempo de
execução de cada Thread iniciada(start).
A troca de contexto ocorre quando o
escalonador salva o estado da thread
atual, para recuperar depois, e pára sua
execução.
Neste momento, é iniciada uma nova
thread.
ou é recuperado o estado de outra que
estava parada, voltando a executar;
Escalonador e trocas de
contexto
Se rodarmos o exemplo dos slides 17 e 18, qual será a
saída?
De um a mil e depois de um a mil?
Provavelmente não, senão seria sequencial.
Ele imprimirá 1 de t1, 1de t2, 2 de t1, 2 de t2, 3 de t1 e
3 de t2 e etc... Exatamente intercalado?
Na verdade, não sabemos exatamente qual é a
saída.
Se executar o programa várias vezes, observará que
em cada execução a saída é um pouco diferente.
Ciclo de vida
Prioridades em Threads
Cada thread possui uma prioridade de execução que
vai de Thread.MIN_PRIORITY (igual a 1) a
Thread.MAX_PRIORITY (igual a 10).
Importante: uma thread herda a prioridade da
thread que a criou.
Iniciando threads...
Main feito
Thread de alta prioridade executando -> 10
Thread de alta prioridade executando -> 10
Thread de baixa prioridade executando -> 1
Thread de baixa prioridade executando -> 1
Thread de baixa prioridade executando -> 1
Thread de alta prioridade executando -> 10
Thread de alta prioridade executando -> 10
Thread de baixa prioridade executando -> 1
Problemas com
Concorrência Sincronização
de Threads
Quando muitas threads são executadas
muitas vezes é necessário sincronizar suas
atividades.
8) Qual o resultado?
Exercícios práticos
Consultando a documentação java,
verificamos que a classe Thread
implementa Runnable.