pool de threads professor: hyggo almeida. o que vimos na última aula? threads sincronização...
TRANSCRIPT
Pool Pool de de ThreadsThreadsProfessor: Hyggo AlmeidaProfessor: Hyggo Almeida
O que vimos na última O que vimos na última aulaaula??
ThreadsThreads SincronizaçãoSincronização
2Pool de ThreadsPool de Threads
O que veremos hojeO que veremos hoje??
ThreadsThreads PoolPool
3Pool de ThreadsPool de Threads
Pool Pool de de ThreadsThreads
Um Um pool pool de de threads threads é uma coleção de é uma coleção de threads threads disponíveis para realizar tarefasdisponíveis para realizar tarefas Melhor desempenho quando se executa um Melhor desempenho quando se executa um grande número de tarefasgrande número de tarefas
Limitação de recursos disponíveisLimitação de recursos disponíveis
Com um Com um poolpool, não é necessário gerenciar o , não é necessário gerenciar o ciclo de vida das ciclo de vida das threadsthreads
4Pool de ThreadsPool de Threads
Pool Pool de de ThreadsThreads
Como implementar?Como implementar? Instanciar uma implementação da interface Instanciar uma implementação da interface ExecutorServiceExecutorService ThreadPoolExecutorThreadPoolExecutor ScheduledThreadPoolExecutorScheduledThreadPoolExecutor
Pode-se definir...Pode-se definir... O número básico e máximo do pool (número de O número básico e máximo do pool (número de
threads)threads) O tipo de estrutura de dados para armazenar as O tipo de estrutura de dados para armazenar as
tarefastarefas Como tratar tarefas rejeitadasComo tratar tarefas rejeitadas Como criar e terminar threadsComo criar e terminar threads
5Pool de ThreadsPool de Threads
Pool Pool de de ThreadsThreads
Há métodos fábrica na classe Executors para a Há métodos fábrica na classe Executors para a criação de criação de poolspools...... newFixedThreadPool(int) newFixedThreadPool(int) - Cria um - Cria um poolpool com número com número
fixo de fixo de threads threads e fila ilimitada de tarefase fila ilimitada de tarefas newCachedThreadPool() newCachedThreadPool() - Cria um pool de - Cria um pool de threadsthreads
sem limite, com recuperação automática de sem limite, com recuperação automática de threadsthreads É uma boa opção quando há muitas tarefas É uma boa opção quando há muitas tarefas
pequenas a executar assincronamente.pequenas a executar assincronamente. Threads Threads não usadas por 60 segundos são não usadas por 60 segundos são
removidasremovidas newSingleThreadExecutor()newSingleThreadExecutor() - Cria uma - Cria uma threadthread única única
em em backgroundbackground com fila ilimitada de tarefas com fila ilimitada de tarefas As tarefas serão executadas seqüencialmenteAs tarefas serão executadas seqüencialmente
6Pool de ThreadsPool de Threads
Pool Pool de de ThreadsThreads
Exemplo com Exemplo com RunnableRunnable
7Pool de ThreadsPool de Threads
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 Pool de de ThreadsThreads
Exemplo com Exemplo com RunnableRunnable 2 threads e 5 tarefas2 threads e 5 tarefas
8Pool de ThreadsPool de Threads
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 Pool de de ThreadsThreads
Vamos implementar o exemplo com Vamos implementar o exemplo com RunnableRunnable
9Pool de ThreadsPool de Threads
Pool Pool de de ThreadsThreads
Exemplo com Exemplo com CallableCallable
10Pool de ThreadsPool de Threads
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 Pool de de ThreadsThreads
Exemplo com Exemplo com CallableCallable
11Pool de ThreadsPool de Threads
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 Pool de de ThreadsThreads
Vamos implementar o exemplo com Vamos implementar o exemplo com CallableCallable
12Pool de ThreadsPool de Threads
O que vimos hojeO que vimos hoje??
ThreadsThreads PoolPool
13Pool de ThreadsPool de Threads
DúvidasDúvidas??
??14Pool de ThreadsPool de Threads