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