Java Thread Scheduling Example Lin,Yong Thread Pools Round-Robin scheduling Job Scheduling.
Thread Java
-
Upload
wellington-oliveira -
Category
Education
-
view
1.684 -
download
0
description
Transcript of Thread Java
![Page 1: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/1.jpg)
Sistemas Operacionais
Implementando Thread em Java
![Page 2: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/2.jpg)
O problema
• Teoricamente existe uma grande proteção para que um processo não afete a execução de outro, modificando, a menos que haja um mecanismo de comunicação entre os processos (IPC – Inter Process Communication).
![Page 3: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/3.jpg)
O problema
• Este alto grau de isolamento reduz os desagradáveis de proteção, pois o sistema se torna mais robusto.
• Em contrapartida, o início de cada processo é bastante custoso, em termos de uso de memória e desempenho, e o mecanismo de troca de mensagens entre os processos é mais complexo e mais lento, se comparado a um único programa acessando a própria base de dados.
![Page 4: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/4.jpg)
Solução
• Implementação de multiprogramação dentro do processo com o uso de Thread.
![Page 5: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/5.jpg)
O que é uma Thread
• Thread é uma linha de execução dentro do processo;
• Um processo pode ter no mínimo 1 linha de execução.
![Page 6: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/6.jpg)
![Page 7: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/7.jpg)
Inicia Execução
• A Thread inicia a execução com a chamada do método start().
![Page 8: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/8.jpg)
Bloqueado
• A thread está no estado de bloqueado, quando for desativada. Para desativar uma thread é necessário que ocorra uma das quatro operações a seguir:
• 1. Foi chamado o método sleep(long tempo) da thread;
• 2. Foi chamado o método suspend();
• 3. A trhead chamou o método wait();
• 4. A thread chamou uma operação de I/O que bloqueia a CPU;
![Page 9: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/9.jpg)
Retorno a Execução
• Para a thread sair do estado de bloqueado e voltar para o estado de executável, uma das seguintes operações deve ocorrer, em oposição as ações acima:
• Retornar após o tempo especificado, caso a thread estiver adormecida;
• Retornar através do método resume(), caso a thread tiver sido suspensa (método deprecado);
• Retornar com o método notify() (ou notifyAll()), caso a thread estiver em espera;
• Retornar após a conclusão da operação de I/O.
![Page 10: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/10.jpg)
Encerrando
• A thread está no estado de encerrado, quando encerrar a sua execução.
• Isto pode acorrer pelo término do método run(), ou pela chamada explícita do método stop().
![Page 11: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/11.jpg)
Criando uma Thread
class Escrita extends Thread {
private int i;
public void run() {
while(true)
System.out.println(“Número :”+ i++);
}
}
![Page 12: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/12.jpg)
Criando uma Thread
public class SimplesThread1 {
public static void main(String[] args) {
Escrita e = new Escrita();
e.start(); //Ativa a thread
}
}
![Page 13: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/13.jpg)
interface Runnable
• A interface pública Runnable deve ser implementada em nossas classes quando queremos que instâncias destas possam ser executadas por uma thread.
![Page 14: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/14.jpg)
Implementando exemplo Runnable
class Escrita implements Runnable {
private int i;
public void run() {
while(true)
System.out.println(“Número: ”+ i++);
}
}
![Page 15: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/15.jpg)
Implementando exemplo Runnable
public class SimplesThread2 {
public static void main(String[] args) {
Escrita e = new Escrita();
Thread t = new Thread(e);
t.start();
}
}
![Page 16: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/16.jpg)
Métodos para trabalhar com Threads
• void run() – Deve conter o código que se deseja executar, quando a thread estiver ativa;
• void start() – Inicia a thread. Ou seja, efetiva a chamada do método run();
• void stop() – encerra a thread;
• static void sleep(long tempo) – deixa thread corrente inativa por no mínimo tempo milisegundos e promove outra thread. Note que este método é de classe e, conseqüentemente, uma thread não pode fazer outra thread dormir por um tempo;
• static void yield() – Deixa a thread em execução temporariamente inativa e, quando possível, promove outra thread de mesma prioridade ou maior;
![Page 17: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/17.jpg)
Métodos para trabalhar com Threads
• void suspend() – Coloca a thread no final da fila de sua prioridade e a deixa inativa (método deprecado);
• void resume() – Habilita novamente a execução da thread. Este método deve ser executado por outra thread, já que a thread suspensa não está sendo executada (método deprecado);
• void interrupt() – envia o pedido de interrupção de execução de uma thread;
• static boolena interrupted() – Verifica se a thread atual está interrompida;
• void join() – Aguarda outra thread para encerrar;
![Page 18: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/18.jpg)
Métodos para trabalhar com Threads
• boolean isAlive() – retorna true caso uma thread estiver no estado executável ou bloqueado. Nos demais retorna false;
• void setPriority(int prioridade) – Define a prioridade de execução de uma thread. Os valores de prioridade estão entre 1 e 10;
• int getPriority() – verifica a prioridade de execução de uma thread;
• synchronized – mecanismo que permite ao programador controlar threads, para que as mesmas possam compartilhar a mesma base de dados sem causar conflitos;
![Page 19: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/19.jpg)
Métodos para trabalhar com Threads
• void wait() – Interrompe a thread corrente e coloca a mesma na fila de espera (do objeto compartilhado) e aguarda que a mesma seja notificada. Este método somente pode ser chamado dentro de um método de sincronizado;
• void notify() – Notifica a próxima thread, aguardando na fila;
• void notifyAll() – Notifica todas as threads.
![Page 20: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/20.jpg)
Exercício
• Exercício: Criar um projeto com 50 Threads independentes escrevendo no Output.
Acompanhe o uso do processamento.
![Page 21: Thread Java](https://reader035.fdocuments.net/reader035/viewer/2022062418/55620734d8b42ae04e8b5bec/html5/thumbnails/21.jpg)
Referência
• http://www.devmedia.com.br/utilizando-threads-parte-1/4459