Есть несколько производителей потребительских шаблонов производитель1 -> потребитель1 / производитель2 -> потребитель2 / производитель 3, каждый производитель использует службу завершения, но у меня возникают проблемы с кодированием логики для разработки, когда она завершена.
Проблема в том, что main помещает некоторые (x) задач в очередь производителя 1, это, в свою очередь, заставит производитель 1 поставить (y) задач на производителя 2, а производитель 2 поместит z задач на производителя 3. x, y и z равны разные, поэтому main не может просто смотреть на очередь завершения производителя 3 и брать фьючерсы z, потому что main не знает z.
Итак, я попробовал идею ядовитой таблетки вместе с CountDownLatch, инициализированным до 3, главный знает, что у производителя 1 есть только x задач, поэтому я могу отправить ядовитую таблетку в конце, а затем, когда производитель 1 получит ее, он может уменьшить защелку и отправить яд pill производителю 2, а производитель 2 получает единицу, он уменьшает защелку, отправляемую производителю 3. Когда производитель 3 принимает ее, он уменьшает защелку. main просто выполняет countdownlatch.await () и не сможет продолжить, пока все задачи не будут выполнены. Но это работает только в том случае, если каждая служба-исполнитель ограничена одним потоком, потому что, когда ядовитая таблетка получена производителем, это означает, что все предыдущие задачи были запущены, а не завершены.
Итак, как мне обойти это, я думаю, что где-то мне не хватает более простого решения.