Как запланировать 2 разные задачи, используя ScheduledExecutorService - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть 2 задачи t1 и t2.Как я должен запланировать их.Оба имеют собственную задержку {d1, d2} и период {p1, p2}.

Подход 1:

Должен ли я использовать

ScheduledExecutorService ser = Executors.newScheduledThreadPool(2);

ser.scheduleAtFixedRate(t1, 1, 3, TimeUnit.SECONDS);
ser.scheduleAtFixedRate(t2, 2, 5, TimeUnit.SECONDS);

Здесь я использовал пул потоков размером 2. Таким образом, обе задачи могут выполняться параллельно.Но если одна задача не будет запущена, поток будет бездействовать.

Принимая во внимание, что я бы взял размер пула потоков равным 1. Одновременно будет работать только одна задача.

Подход 2:

ScheduledExecutorService ser1 = Executors.newScheduledThreadPool(1);
ScheduledExecutorService ser2 = Executors.newScheduledThreadPool(1);

ser1.scheduleAtFixedRate(t1, 1, 3, TimeUnit.SECONDS);
ser2.scheduleAtFixedRate(t2, 2, 5, TimeUnit.SECONDS);

Здесь я использовал 2 ScheduledExecutorService, по одному на задачу.

Какими будут различия / преимущества-недостатки внутри обоих подходов?

1 Ответ

0 голосов
/ 10 сентября 2018

Я бы определенно ожидал увидеть первый в большинстве кода. Идея пула потоков заключается в буквальном смысле, что у вас есть пул потоков вокруг для использования по мере необходимости. Вы можете управлять ими сразу через исполнителя. Кроме того, поскольку это ограниченный / ограниченный пул, вы гарантируете, что, если отправлено слишком много задач, вы не запускаете их все сразу (так что это как защита).

Создание отдельных пулов потоков не имеет смысла; он теряет эти преимущества ... и в этом случае вы можете просто создать простой таймер для каждой задачи.

Если вы действительно заботитесь об этом уровне детализации, вы можете получить больший контроль над пулом потоков (например, отменить свободные потоки через определенное время). Проверьте это: https://www.codejava.net/java-core/concurrency/java-concurrency-understanding-thread-pool-and-executors.

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

...