CCComp - DCE - UESB Utilizando Threads em Java Resumo sobre os threads em Java Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Estrutura Geral das Implementações class ProcessoA extends Thread { public void run() { ... }//fim do metodo run }//fim da classe ProcessoA class ProcessoB extends Thread { public void run() { ... }//fim do metodo run }//fim da classe ProcessoA ... //outros processos public class Principal { static public void main(String s[]) { ProcessoA pa = new ProcessoA(); ProcessoB pb = new ProcessoB(); pa.start(); pb.start(); ... //outros gerenciamentos }//fim do metodo main }//fim da classe principal Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Start (1) import java.lang.Thread; class MeuThread1 extends Thread { public void run() { for (int i = 1; i<100; i++) System.out.println("Marlos"); }//fim do metodo run }//fim da classe MeuThread1 class MeuThread2 extends Thread { public void run() { for (int i = 1; i<50; i++) System.out.println("UESB"); }//fim do metodo run }//fim da classe MeuThread2 Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Start (2) public class ExemploDeThreadMetodoStart { public static void main(String s[]) { MeuThread1 Ta = new MeuThread1(); //Define thread MeuThread2 Tb = new MeuThread2(); //Define thread Tb como um MeuThread1 Tb como um MeuThread2 Ta.start(); //Comeca execucao do metodo run() do thread Ta Tb.start(); //Comeca execucao do metodo run() do thread Tb }//fim do metodo main }//fim da classe Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Suspend e Resume import java.lang.Thread; class MeuThread extends Thread { public void run() { while (true) { //o processo roda "para sempre" System.out.println("UESB"); try { //a funcao sleep deve estar entre os comandos try/catch Thread.sleep(500); } catch (InterruptedException e) {} }//fim do while }//fim do metodo run }//fim da classe MeuThread public class ExemploDeThreadMetodoSuspendResume { public static void main(String s[]) { MeuThread1 Ta = new MeuThread(); //Define Tb como um thread Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Suspend e Resume System.out.println("Inicializando um Thread..."); Ta.start(); //comeca a execucao do thread Ta //Espera um pouco try { Thread.sleep(2000); } catch (InterruptedException e) {} System.out.println("Suspendendo o thread..."); Ta.suspend(); //Suspende o thread Ta //Espera um pouco try { Thread.sleep(2000); } catch (InterruptedException e) {} System.out.println("Reinicializando o thread..."); Ta.resume(); //reinicializa o thread Ta e executa indefinidamente }//fim do metodo main }//fim da classe Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Stop import java.lang.Thread; class MeuThread extends Thread { public void run() { while (true) { //o processo roda "para sempre" System.out.println("UESB"); try { //a funcao sleep deve estar entre os comandos try/catch Thread.sleep(500); } catch (InterruptedException e) {} }//fim do while }//fim do metodo run }//fim da classe MeuThread public class ExemploDeThreadMetodoStop { public static void main(String s[]) { MeuThread1 Ta = new MeuThread(); //Define Tb como um thread Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Stop System.out.println("Inicializando um Thread..."); Ta.start(); //comeca a execucao do thread Ta //Espera um pouco try { Thread.sleep(2000); } catch (InterruptedException e) {} System.out.println("Parando o thread..."); Ta.stop(); //Para o thread Ta //Espera um pouco try { Thread.sleep(2000); } catch (InterruptedException e) {} System.out.println("Tentando reinicializar o thread..."); Ta.start(); //Tenta reinicilizar o thread. Nao ira funcionar. } //fim do metodo main } //fim da classe Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Join import java.lang.Thread; class MeuThread1 extends Thread { public void run() { for (int i=0; i<5; i++) { System.out.println("UESB"); try { Thread.sleep(500); } catch (InterruptedException e) {} }//fim do for }//fim do metodo run }//fim da classe MeuThread1 class MeuThread2 extends Thread { private Thread esperapormim; //variavel que servira de sinronizador MeuThread2 (Thread outrothread) { //construtor da classe super(); esperapormim = outrothread; } Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Join //espera o thread alvo terminar public void run() { System.out.println("O Thread Tb esta esperando pelo Thread Ta..."); try { esperapormim.join(); } catch (InterruptedException e) {} System.out.println("O Thread Ta terminou..."); for (int i=0; i<5; i++) { System.out.println("Alo Voce! Estou executando o Thread Tb"); try { Thread.sleep(500); } catch (InterruptedException e) {} }//fim do for }//fim do metodo run }//fim da classe MeuThread2 public class ExemploDeJoinThread { public static void main(String s[]) { MeuThread1 Ta = new MeuThread1(); //Define Ta como um thread MeuThread2 Tb = new MeuThread2(Ta); //Define Tb como um thread Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Join System.out.println("Inicializando os Threads..."); Ta.start(); //comeca a execucao do thread Ta Tb.start(); //comeca a execucao do Thread Tb } //fim do metodo main } //fim da classe Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Priority import java.lang.Thread; class MeuThread1 extends Thread { public void run() { while (true) System.out.println("UESB"); }//fim do metodo run }//fim da classe MeuThread1 class MeuThread2 extends Thread { public void run() { while (true) System.out.println("VITÓRIA DA CONQUISTA"); }//fim do metodo run }//fim da classe MeuThread2 class MeuThread3 extends Thread { public void run() { while (true) System.out.println("PROGRAMAÇÃO CONCORRENTE"); }//fim do metodo run }//fim da classe MeuThread3 Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Priority public class ExemploDePriorityThread { public static void main(String s[]) { MeuThread1 Ta = new MeuThread1(); MeuThread2 Tb = new MeuThread2(); MeuThread3 Tc = new MeuThread3(); System.out.println("Inicializando os Threads..."); Ta.start(); //comeca a execucao do thread Ta Tb.start(); //comeca a execucao do thread Tb Tc.start(); //comeca a execucao do thread Tc try { Thread.sleep(2000); } catch (InterruptedException e) {} System.out.println("AUMENTANDO a prioridade de Tb..."); Tb.setPriority(Tb.getPriority() + 2); try { Thread.sleep(2000); } catch (InterruptedException e) {} Programação Concorrente Prof. Marlos Marques CCComp - DCE - UESB Exemplo de Priority System.out.println("DIMINUINDO a prioridade de Tb..."); Tb.setPriority(Tb.getPriority() - 4); try { Thread.sleep(2000); } catch (InterruptedException e) {} System.out.println("Todos os threads com prioridade IGUAIS..."); Tb.setPriority(Tb.getPriority() + 2); } //fim do metodo main } //fim da classe Programação Concorrente Prof. Marlos Marques