У меня есть Исполнитель (получено через Executors.newFixedThreadPool(int)
). Я хотел бы запустить некоторый произвольный код всякий раз, когда а) очередь пуста, и элемент вставляется в очередь, и б) очередь не пуста, и последний элемент в очереди удаляется. И a), и b) всегда должны выполняться всякий раз, когда выполняются их соответствующие условия, например. если очередь очищается и заполняется несколько раз, а) и б) будет выполняться несколько раз.
Все это должно быть невидимым для пользователя исполнителя, что подразумевает, что код, вероятно, должен быть внутри какой-то оболочки, которая реализует ExecutorService. Я могу обернуть результат newFixedThreadPool()
, прежде чем вернуть его пользователю, если захочу. Я также могу полностью реализовать свой собственный ExecutorServicee.
Я хочу быть абсолютно уверенным, что а) и б) ведут себя должным образом в отношении синхронизации между несколькими потоками. Мне не ясно лучший способ сделать это.
Предложения