Pool de Threads

Propaganda
Pool de Threads
Professor: Hyggo Almeida
O que vimos na última aula?
Threads
¤  Sincronização
Pool de Threads
2
O que veremos hoje?
Threads
¤  Pool
Pool de Threads
3
Pool de Threads
Um pool de threads é uma coleção de threads disponíveis
para realizar tarefas
¤  Melhor desempenho quando se executa um grande
número de tarefas
¤  Limitação de recursos disponíveis
Com um pool, não é necessário gerenciar o ciclo de vida das
threads
Pool de Threads
4
Pool de Threads
Como implementar?
¤  Instanciar uma implementação da interface
ExecutorService
¤ 
¤ 
¤ 
ThreadPoolExecutor
ScheduledThreadPoolExecutor
Pode-se definir...
¤ 
O número básico e máximo do pool (número de threads)
¤ 
O tipo de estrutura de dados para armazenar as tarefas
¤ 
Como tratar tarefas rejeitadas
¤ 
Como criar e terminar threads
Pool de Threads
5
Pool de Threads
Há métodos fábrica na classe Executors para a criação de
pools...
¤ 
¤ 
¤ 
newFixedThreadPool(int) - Cria um pool com número fixo de
threads e fila ilimitada de tarefas
newCachedThreadPool() - Cria um pool de threads sem limite,
com recuperação automática de threads
¤ 
É uma boa opção quando há muitas tarefas pequenas a executar
assincronamente.
¤ 
Threads não usadas por 60 segundos são removidas
newSingleThreadExecutor() - Cria uma thread única em
background com fila ilimitada de tarefas
¤ 
As tarefas serão executadas seqüencialmente
Pool de Threads
6
Pool de Threads
q 
Exemplo com Runnable
public class WorkerThread implements Runnable {
private int workerNumber;
public WorkerThread(int number) {
workerNumber = number;
}
public void run() {
for (int i=0;i<=100;i+=20) {
// Realiza algum trabalho...
System.out.println(“Worker:” + workerNumber + ", %: " + i);
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {}
}
}
}
Pool de Threads
7
Pool de Threads
q 
Exemplo com Runnable
ð 
2 threads e 5 tarefas
import java.util.concurrent.*;
public class ThreadPoolTest {
public static void main(String[] args) {
ExecutorService tpes = Executors.newFixedThreadPool(2);
WorkerThread[] workers = new WorkerThread[5];
for (int i = 0; i < workers.length; i++) {
workers[i] = new WorkerThread(i);
tpes.execute(workers[i]);
}
tpes.shutdown();
}
}
Pool de Threads
8
Pool de Threads
q 
Vamos implementar o exemplo com Runnable
Pool de Threads
9
Pool de Threads
q 
Exemplo com Callable
import java.util.concurrent.*;
public class CallableWorkerThread implements Callable {
private int workerNumber;
public CallableWorkerThread(int number) {
workerNumber = number;
}
public Object call() {
for (int i = 0; i <= 100; i += 20) {
// Realiza algum trabalho...
System.out.println(“Worker:” + workerNumber + ", %: " + i);
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {}
}
return(new Integer(workerNumber));
}
}
Pool de Threads
10
Pool de Threads
q 
Exemplo com Callable
public class ThreadPoolTest2 {
public static void main(String[] args) {
ExecutorService tpes = Executors.newCachedThreadPool();
CallableWorkerThread workers[] = new CallableWorkerThread[4];
Future futures[] = new Future[4];
for (int i = 0; i < workers.length; i++) {
workers[i] = new CallableWorkerThread(i);
futures[i]=tpes.submit(workers[i]);
}
for (int i = 0; i < workers.length; i++) {
try {
System.out.println("Ending worker: " +futures[i].get());
} catch (Exception e) {}
}
tpes.shutdown();
}
}
Pool de Threads
11
Pool de Threads
q 
Vamos implementar o exemplo com Callable
Pool de Threads
12
O que vimos hoje?
Threads
¤  Pool
Pool de Threads
13
Dúvidas?
?
Pool de Threads
14
Download