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