Как получить java-исполнитель с тем же потоком?

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

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

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

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

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

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

Я могу понять, почему вас могут беспокоить накладные расходы на уничтожение и воссоздание рабочего потока, но почему личность рабочего потока имеет значение для вашего приложения?

besmirched 13.09.2018 14:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
293
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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 equivalent newFixedThreadPool(1) the returned executor is guaranteed not to be reconfigurable to use additional threads.

@LunaVulpo гарантирует, что один поток будет использоваться до первого сбоя

Andrew Tobilko 13.09.2018 13:54

Другие вопросы по теме