Когда исполнитель отказывается, он больше не принимает новую задачу и ожидает завершения текущей задачи. Но вы не хотите увольнять своего исполнителя, просто сделайте паузу.
Итак, что вы можете сделать, так это то, что в вашей задаче вы просто имеете дело с пустой очередью. Поскольку ваша задача должна выполняться только время от времени, загрузка ЦП для нее будет близка к 0, когда обработка не выполняется. это "if (! queue.isEmpty ()) return;" от Питера Лоури ответ.
Во-вторых, вы используете очередь блокировки. Это означает, что если вы вызываете метод take (), чтобы получить элемент из очереди, когда очередь пуста, поток исполнителя будет ждать, пока какой-либо элемент будет добавлен в очередь автоматически.
Итак:
- Вы не можете приостановить исполнителя даже
это усложнит ваш код.
- Блокирующую очередь делай по задумке точно
что вам нужно: блокировка задачи, если
очередь пуста.
- если вы предпочитаете, вы можете просто позволить
периодическое выполнение задачи и проверьте, если
очередь пустая.
- Вы уже должны использовать один или
иначе в твоей задаче
в противном случае вы бы
NullPointerException, когда очередь
пуст.