A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Pool de Threads Professor: Hyggo Almeida. O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads."— Transcrição da apresentação:

1 Pool de Threads Professor: Hyggo Almeida

2 O que vimos na última aula? Threads Sincronização Sincronização 2 Pool de Threads

3 O que veremos hoje? Threads Pool Pool 3 Pool de Threads

4 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 Melhor desempenho quando se executa um grande número de tarefas Limitação de recursos disponíveis Limitação de recursos disponíveis Com um pool, não é necessário gerenciar o ciclo de vida das threads 4 Pool de Threads

5 Como implementar? Instanciar uma implementação da interface ExecutorService Instanciar uma implementação da interface ExecutorService ThreadPoolExecutor ThreadPoolExecutor ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor Pode-se definir... Pode-se definir... O número básico e máximo do pool (número de threads) O número básico e máximo do pool (número de threads) O tipo de estrutura de dados para armazenar as tarefas O tipo de estrutura de dados para armazenar as tarefas Como tratar tarefas rejeitadas Como tratar tarefas rejeitadas Como criar e terminar threads Como criar e terminar threads 5 Pool de Threads

6 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 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 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. É uma boa opção quando há muitas tarefas pequenas a executar assincronamente. Threads não usadas por 60 segundos são removidas Threads não usadas por 60 segundos são removidas newSingleThreadExecutor() - Cria uma thread única em background com fila ilimitada de tarefas newSingleThreadExecutor() - Cria uma thread única em background com fila ilimitada de tarefas As tarefas serão executadas seqüencialmente As tarefas serão executadas seqüencialmente 6 Pool de Threads

7 Exemplo com Runnable Exemplo com Runnable 7 Pool 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) {} }

8 Pool de Threads Exemplo com Runnable Exemplo com Runnable 2 threads e 5 tarefas 2 threads e 5 tarefas 8 Pool 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(); }

9 Pool de Threads Vamos implementar o exemplo com Runnable Vamos implementar o exemplo com Runnable 9 Pool de Threads

10 Exemplo com Callable Exemplo com Callable 10 Pool 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)); }

11 Pool de Threads Exemplo com Callable Exemplo com Callable 11 Pool 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(); }

12 Pool de Threads Vamos implementar o exemplo com Callable Vamos implementar o exemplo com Callable 12 Pool de Threads

13 O que vimos hoje? Threads Pool Pool 13 Pool de Threads

14 Dúvidas? ? 14 Pool de Threads


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

Apresentações semelhantes


Anúncios Google