Исполнители Java: как получить уведомление, не блокируя, когда задача завершена?

Скажем, у меня есть очередь, полная задач, которые мне нужно отправить в службу исполнителя. Я хочу, чтобы они обрабатывались по одному. Самый простой способ, который я могу придумать, это:

Возьмите задачу из очередиОтправить его исполнителюПозвоните .get на возвращенное будущее и заблокируйте, пока результат не будет доступенВозьми еще одно задание из очереди ...

Тем не менее, я пытаюсь избежать блокировки полностью. Если у меня будет 10 000 таких очередей, для которых нужно обрабатывать свои задачи по одной, я исчерпаю пространство стека, потому что большинство из них будут удерживать заблокированные потоки.

То, что я хотел бы, состоит в том, чтобы представить задачу и предоставить обратный вызов, который вызывается, когда задача завершена. Я буду использовать это уведомление об обратном вызове в качестве флага для отправки следующего задания. (functionjava и jetlang, очевидно, используют такие неблокирующие алгоритмы, но я не могу понять их код)

Как я могу сделать это, используя java.util.concurrent JDK, если не считать написания моей собственной службы исполнителя?

(очередь, которая кормит меня этими задачами, может сама блокироваться, но это проблема, которая будет решена позже)

Ответы на вопрос(11)

Ваш ответ на вопрос