Dúvida sobre "Fixed Thread Pool"

1 resposta
Jedi_FeniX

Estou com uma dúvida em relação ao método Executors.newFixedThreadPool(int param).
Criando um pool de trheads com este método o programa “para” quando o pool fica cheio?
Por exemplo, tenho um loop que chama o ExecutorService.execute, quando as threads forem totalmente usadas no pool o programa entra em em sleep?

Exemplo:

...
ExecutorService es = Executors.newFixedThreadPool(100);
...

public void foo() {
   
   boolean status = true;
   List list;


   while(status) {

      list = dao.getContent();

      if ( list.size() < 0 ) { continue; }

      iterator = list.iterator();

      while(iterator.hasNext()) {

        es.execute(new ThreadExample(iterator.next()));
        iterator.remove();

      }
   }

}

No exemplo acima, caso a minha dao retorne 300 objetos, só os 100 primeiros serão processados? E ai o programa fica esperando para processar os outros 200? ou o programa continua rodando e “populando” o meu list?

1 Resposta

ViniGodoy

O java tem 2 parâmetros para os FixedThreadPools:

  1. O número máximo de Threads simultâneas;
  2. O tamanho da fila de Runnables.

Caso o primeiro seja excedido, os runnables são enfileirados no segundo. O método execute retorna imediatamente, entregando para você um future. Com esse future, você pode monitorar se aquela execução já começou ou não.

No caso desse método fábrica (newFixedThreadPool), a fila não tem limite.

Para mais informações:
Javadoc do ThreadPoolExecutor
Javadoc do método newFixedThreadPool

Criado 10 de agosto de 2009
Ultima resposta 10 de ago. de 2009
Respostas 1
Participantes 2