Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização...

14
Pool Pool de de Threads Threads Professor: Hyggo Almeida Professor: Hyggo Almeida

Transcript of Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização...

Page 1: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

Pool Pool de de ThreadsThreadsProfessor: Hyggo AlmeidaProfessor: Hyggo Almeida

Page 2: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

O que vimos na última O que vimos na última aulaaula??

ThreadsThreads SincronizaçãoSincronização

2Pool de ThreadsPool de Threads

Page 3: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

O que veremos hojeO que veremos hoje??

ThreadsThreads PoolPool

3Pool de ThreadsPool de Threads

Page 4: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool 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

Page 5: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool 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

Page 6: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool 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

Page 7: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool 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) {} } }}

Page 8: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

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(); }}

Page 9: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

Pool Pool de de ThreadsThreads

Vamos implementar o exemplo com Vamos implementar o exemplo com RunnableRunnable

9Pool de ThreadsPool de Threads

Page 10: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool 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)); }}

Page 11: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

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(); }}

Page 12: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

Pool Pool de de ThreadsThreads

Vamos implementar o exemplo com Vamos implementar o exemplo com CallableCallable

12Pool de ThreadsPool de Threads

Page 13: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

O que vimos hojeO que vimos hoje??

ThreadsThreads PoolPool

13Pool de ThreadsPool de Threads

Page 14: Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads.

DúvidasDúvidas??

??14Pool de ThreadsPool de Threads