Utilizando Threads em Java

Propaganda
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
Download