Для некоторых предложений мне нужно создать Executor
, который всегда имеет один и тот же поток.
Executors.newFixedThreadPool(1);
Executors.newScheduledThreadPool(1);
В приведенных выше примерах создается один пул потоков, но когда работа будет выполнена, поток будет завершен и снова будет создан новый, если исполнителю будет передана новая задача.
Итак, я придумал что-то вроде этого:
new ThreadPoolExecutor(1,1,Long.MAX_VALUE, TimeUnit.DAYS, new LinkedBlockingQueue<>());
кажется, что это работает, но я сомневаюсь, что это правильный подход. Может кто-нибудь подскажет лучше / правильнее?
Executors.newSingleThreadExecutor();
Из документация (выделено мной):
Creates an
Executor
that uses a single worker thread operating off an unbounded queue. (Note however that if this single thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks.) Tasks are guaranteed to execute sequentially, and no more than one task will be active at any given time. Unlike the otherwise equivalentnewFixedThreadPool(1)
the returned executor is guaranteed not to be reconfigurable to use additional threads.
@LunaVulpo гарантирует, что один поток будет использоваться до первого сбоя
Я могу понять, почему вас могут беспокоить накладные расходы на уничтожение и воссоздание рабочего потока, но почему личность рабочего потока имеет значение для вашего приложения?