Как запустить произвольный код, когда первый элемент помещается в очередь потока Java ExecutorService и когда последний элемент удаляется? - PullRequest
2 голосов
/ 23 августа 2011

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

Все это должно быть невидимым для пользователя исполнителя, что подразумевает, что код, вероятно, должен быть внутри какой-то оболочки, которая реализует ExecutorService. Я могу обернуть результат newFixedThreadPool(), прежде чем вернуть его пользователю, если захочу. Я также могу полностью реализовать свой собственный ExecutorServicee.

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

Предложения

1 Ответ

1 голос
/ 23 августа 2011

Для начала звучит так, будто все, что вам нужно, это украсить реализацию BlockingQueue, используемую исполнителем, так, чтобы при вызове add (), offer () и т. Д. И очереди isEmpty () вы выполняли a), и когда вызывается remove (), take () и т. д., в результате чего очередь становится isEmpty (), вы выполняете b). Вы могли бы даже где-нибудь найти такую ​​реализацию очереди.

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