Buscar

14POO aula08 doc02

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Exemplo de sincronização 
 
Vamos criar um programa para criar threads e coloca-las para dormir com um tempo 
aleatório entre 0 e 5 segundos. Vamos monitorar seu funcionamento, quer dizer, ao 
criarmos os threads, informaremos quanto tempo cada uma irá dormir. Ao acordar, 
cada uma deve sinalizar que acordou e terminar. 
 
 
 
class PrintThread extends Thread{ 
 private int tempoDormir; 
 
 public PrintThread(String nome){ 
 super(nome); 
 //adormece durante 0 a 5 segundos 
 tempoDormir = (int)(Math.random()*5000); 
 
 System.err.println("Nome: "+getName()+"; dormindo: "+tempoDormir); 
 } 
 
 public void run(){ 
 try{ 
 System.err.println(getName()+" Indo dormir"); 
 Thread.sleep(tempoDormir); 
 } 
 catch (InterruptedException interruptedException){ 
 System.err.println(interruptedException.toString()); 
 } 
 System.err.println(getName()+" Terminando de dormir"); 
 } 
} 
 
public class TestarThread { 
 public static void main(String args[]){ 
 PrintThread thread1, thread2, thread3, thread4; 
 
 thread1 = new PrintThread("Thread 1"); 
 thread2 = new PrintThread("Thread 2"); 
 thread3 = new PrintThread("Thread 3"); 
 thread4 = new PrintThread("Thread 4"); 
 
 System.err.println("\nIniciando as threads"); 
 
 thread1.start(); 
 thread2.start(); 
 thread3.start(); 
 thread4.start(); 
 
 System.err.println("\nThreads iniciadas\n"); 
 
 
 } 
 
} 
 
Observe a saída: 
run: 
Nome: Thread 1; dormindo: 637 
Nome: Thread 2; dormindo: 1274 
Nome: Thread 3; dormindo: 493 
Nome: Thread 4; dormindo: 2744 
 
Iniciando as threads 
 
Threads iniciadas 
 
Thread 1 Indo dormir 
Thread 3 Indo dormir 
Thread 2 Indo dormir 
Thread 4 Indo dormir 
Thread 3 Terminando de dormir 
Thread 1 Terminando de dormir 
Thread 2 Terminando de dormir 
Thread 4 Terminando de dormir 
 
CONSTRUÍDO COM SUCESSO (tempo total: 3 segundos) 
 
Observe que as quatro threads foram criadas na ordem, com tempos de sono 
diferentes. A saída da execução de cada thread já tira da ordem normal, visto que foi 
dada pelo escalonador. 
Mas, como o tempo dormindo é bem diferente, a thread 3, que dormiu 493 
milisegundos acorda primeiro, seguindo da 1, 2 e finalmente 4. Observe também que 
o tempo total de execução do programa foi de 3 segundos.

Outros materiais