Как иметь Java-исполнитель с тем же потоком? - PullRequest
0 голосов
/ 13 сентября 2018

Для некоторых предложений мне нужно создать Executor, в котором всегда будет один и тот же поток.

Executors.newFixedThreadPool(1);
Executors.newScheduledThreadPool(1);

Приведенные выше примеры создают один пул потоков, но когда работа завершена, поток завершается и снова создает новый, если новая задача передается исполнителю.

Итак, я понял что-то вроде этого:

new ThreadPoolExecutor(1,1,Long.MAX_VALUE, TimeUnit.DAYS, new LinkedBlockingQueue<>());

кажется, что работает, но у меня есть сомнения, если это правильный подход. Может кто-нибудь показать лучший / правильный путь?

1 Ответ

0 голосов
/ 13 сентября 2018
Executors.newSingleThreadExecutor();

Из документации (выделено мной):

Создает Executor, который использует один рабочий поток, работающий из неограниченной очереди. (Обратите внимание, что если этот отдельный поток завершается из-за сбоя во время выполнения перед завершением работы, то при необходимости для выполнения последующих задач его место займет новый.) Гарантируется, что задачи выполняются последовательно, и не болеечем одна задача будет активна в любой момент времени.В отличие от эквивалентного newFixedThreadPool(1), возвращаемый исполнитель гарантированно не может быть перенастроен для использования дополнительных потоков.

...