Скажіть, у мене черга, повна завдань, які мені потрібно подати до служби виконавця. Я хочу, щоб вони оброблялися по одному. Найпростіший спосіб, що я можу придумати, це:
- Візьміть завдання з черги
- Подайте його виконавцю
- Викличте .get у поверненому майбутньому та блокуйте, поки результат не буде доступний
- Візьміть ще одне завдання з черги ...
Однак я намагаюся уникати блокування повністю. Якщо у мене є 10 000 таких черг, для яких потрібно обробляти свої завдання одна за одною, у мене залишиться місця у стеці, оскільки більшість з них буде триматися на заблокованих потоках.
Мені хотілося б подати завдання та надіслати зворотній дзвінок, який викликається, коли завдання виконане. Я буду використовувати це повідомлення про зворотний дзвінок як прапор для надсилання наступного завдання. (Функціонава і jetlang, мабуть, використовують такі неблокуючі алгоритми, але я не можу зрозуміти їх код)
Як я можу це зробити за допомогою програми java.util.contil JDK, якщо я не написав власну службу виконавця?
(черга, яка подає мені ці завдання, сама може блокуватись, але це питання, яке потрібно вирішити пізніше)