Скажем, у меня есть очередь, полная задач, которые мне нужно отправить в службу исполнителя. Я хочу, чтобы они обрабатывались по одному. Самый простой способ, о котором я могу думать, это:
- Возьмите задачу из очереди
- Отправить его исполнителю
- Вызовите .get в возвращаемом будущем и заблокируйте, пока не будет доступен результат.
- Возьмите еще одну задачу из очереди...
Однако я стараюсь полностью не блокировать. Если у меня 10 000 таких очередей, для которых их задачи обрабатываются по одному, у меня закончится пространство стека, потому что большинство из них будет удерживать блокированные потоки.
Я хотел бы отправить задание и предоставить обратный вызов, который вызывается, когда задача завершена. Я буду использовать это уведомление обратного вызова в качестве флага для отправки следующей задачи. (Функциональные и реактивные джойстики, по-видимому, используют такие неблокирующие алгоритмы, но я не могу понять их код)
Как я могу это сделать с помощью JDK java.util.concurrent, за исключением написания моей собственной службы-исполнителя?
(очередь, которая передает мне эти задачи, может сама блокироваться, но это проблема, которая будет решена позже)