Sunteți pe pagina 1din 7

Gerenciando Threads

ilo.rivero@anhanguera.com

Grupos de Threads
public class GroupTest {
public static void main(String args[]) {
ThreadGroup group = new ThreadGroup("Sleepers"); // Cria grupo
for (int i=0; i<10; i++) {
new Thread(group,"Sleeper"+i) {
public void run() {
System.out.println(getName() + " iniciada.");
try {
sleep(10000);
} catch (InterruptedException ie) {
System.out.println(getName() + " interrompida.");
}
}
}.start();
}
try {
Thread.sleep(5000);
} catch (InterruptedException ie) {}
group.interrupt(); // Interrompe todas as threads do grupo
}
}

ThreadSleep
public class ThreadSleep extends Thread {
private long tempo = 0;

public ThreadSleep(long tempo) {


this.tempo = tempo;
}
public void run() {
System.out.println(getName() + " vai dormir por " + tempo + " ms.");

try {
sleep(tempo);
System.out.println(getName() + " acordou.");
} catch (InterruptedException e) {
e.printStackTrace();

}
}
public static void main(String args[]) {
for (int i=0; i<10; i++)
// Cria e executa as Threads

new ThreadSleep((long)(Math.random() * 10000)).start();


}
}

Scheduler
import java.util.concurrent.*;
public class ScheduleThread extends Thread {
public void run() {
System.out.println(getName() + " executada.");
}
public static void main(String args[]) {
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
for (int i=0; i<10; i++) {
long tempo = (long) (Math.random()*10000);
System.out.println("Thread-" + i + " ser executada em "+ tempo + "ms.");
exec.schedule(new ScheduleThread(), tempo, TimeUnit.MILLISECONDS);
}
exec.shutdown();
}
}

ThreadLocal
public class ThreadLocalTest extends Thread {
static ThreadLocal valorLocal = new ThreadLocal();
static int contador = 0;
public void run() {
System.out.println(getName() + ": valorLocal = " + contador);
valorLocal.set(new Integer(contador++));
try {
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
int valor = ((Integer)valorLocal.get()).intValue();
System.out.println(getName() + ": valorLocal = " + valor);
}
public static void main (String args[]) {
for (int i =0; i<10; i++)
new ThreadLocalTest().start();
}
}

Atividade
Escreva um relatrio sobre os 4 cdigos apresentados, respondendo s seguintes
questes:
1.

Qual a diferena do cdigo de GroupTest para ThreadSleep, com relao ao resultado?

2.

Qual a vantagem de se utilizar ThreadGroup?

3.

Explique como funciona Java Executors e qual a sua utilidade no cdigo ScheduleThread

4.

Explique como a varivel valor no alterada pelas vrias threads no cdigo ThreadLocal.

5.

Modifique o cdigo para que ela seja alterada por todas as threads.

Atividade
Enviar para:
ilorivero@live.com
Assunto: Atividade Prtica Gerncia de Threads
Anexar o relatrio com o cdigo no texto
Valor: 0,5 ponto extra

S-ar putea să vă placă și