Как запланировать несколько задач с помощью ExecutorService

У меня есть три независимые задачи, которые нужно выполнять каждую минуту. Здесь я разработал два варианта.

Вариант 1

ScheduledExecutorService service1 = Executors.newScheduledThreadPool(1); 
ScheduledExecutorService service2 = Executors.newScheduledThreadPool(1); 
ScheduledExecutorService service2 = Executors.newScheduledThreadPool(1); 
service1.scheduleAtFixedRate(new task1(), 0, 60, TimeUnit.SECONDS); 
service2.scheduleAtFixedRate(new task2(), 0, 60, TimeUnit.SECONDS); 
service3.scheduleAtFixedRate(new task3(), 0, 60, TimeUnit.SECONDS);

Вариант 2

ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
service.scheduleAtFixedRate(new task1(), 0, 60, TimeUnit.SECONDS);
service.scheduleAtFixedRate(new task2(), 0, 60, TimeUnit.SECONDS);
service.scheduleAtFixedRate(new task3(), 0, 60, TimeUnit.SECONDS);

У меня вопрос, какой вариант предпочтительнее? Вариант 1 потребляет больше системных ресурсов?


person CLI    schedule 21.12.2016    source источник


Ответы (1)


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

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

person Tim Biegeleisen    schedule 21.12.2016