Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть нить А, и нужно сделать n работ. Поток A должен ждать, пока эта работа не будет полностью завершена. Моя идея состоит в том, чтобы использовать CountDownLatch
с n счетчиком и использовать шаблон производителя / потребителя для управления рабочим.
Я использую AtomicInteger
в качестве счетчика: Производитель проверяет, больше ли значение счетчика, чем 0, затем подает сигнал на BlockingQueue
, если значение счетчика меньше или равно 0, Производитель устанавливает stopSignal в очередь. Потребитель берет из очереди, проверяет, не равен ли сигнал stopSignal, затем использует ExecutorService
, чтобы запланировать Worker
.
Рабочий позвонит getAndDecrement
и проверит, если значение счетчика больше 0, если да, тогда сделай работу,
если работа выполнена, то она вызывает CountDownLatch # countdown, иначе счетчик увеличивается на incrementAndGet
Проблема в том, что когда работа не выполнена, рабочий должен увеличить счетчик, но это после getAndDecrement
, чтобы производитель мог увидеть значение счетчика равным 0 и поставить сигнал остановки даже на общую сумму работы. меньше п!