2015-07-29 2 views
2

Я создал threadpool, используя ExecutorService, в своем приложении для вызова поставщика websrvice, используя приведенный ниже код.Нужно ли отключать ExecutorService fixedThreadPool

ExecutorService executor = Executors.newFixedThreadPool(getThreadPoolSize()); 
    for (int i = 0; i < list.size(); i++) { 
        Request ecpReq = list.get(i);   
        thRespLst.add(executor.submit(new Task(ecpReq))); 
       } 

Хотел знать, мы должны позаботиться о выключая ThreadPool или что-то, в принципе я не хочу висит потоков в производственной среде.

+2

Javadoc говорит: «Неиспользованный« ExecutorService »должен быть закрыт, чтобы разрешить регенерацию его ресурсов». – Marvin

+1

Итерирование не является потокобезопасным: вызов 'list.size()' может возвращать номер 'N' и сразу после этого, прежде чем вы вызовете' list.get (i) элемент 'Nth', возможно, был удален. –

ответ

3
  • newFixedThreadPool

общественности статической ExecutorService newFixedThreadPool (INT nThreads)

Создает пул потоков, который повторно использует фиксированное количество потоков, работающих выкл общей неограниченной очереди. В любой момент, не более nThreads будут активны задачи обработки . Если дополнительные задачи отправляются , когда все потоки активны, они будут ждать в очереди до тех пор, пока не появится поток . Если какой-либо поток завершается из-за сбоя во время выполнения перед завершением работы, новый новый займет свое место, если необходимо, для выполнения последующих задач. Нити в бассейне будут существовать до , это явно отключено.

Javadocs.

Here хорошее описание.

-2

FinalizableDelegatedExecutorService и ThreadPoolExecutor переопределить finalize() для завершения работы.

/** 
* Invokes {@code shutdown} when this executor is no longer 
* referenced and it has no threads. 
*/ 
protected void finalize() { 
    shutdown(); 
} 

Acutally, я не вижу причин, явно выключение ExecutorService.

+0

ExecutorService должен быть отключен явно, чтобы восстановить ресурсы (CPU и Memory), занятые потоками, которые уже завершили свою работу, но все еще существуют. –