Похоже, что счетчик обратного отсчета, вызывая метод обратного отсчета объекта Countdownlatch, за исключением счетчика на 1. Когда он достигает 0, все официанты начинают выполнять.
java.util.concurrent.countdownlaatch
Синхронный вспомогательный класс, прежде чем завершить набор операций в других потоках, он позволяет ждать один или несколько потоков ждать. Используйте заданный счет, чтобы инициализация обратного отсчета. Поскольку метод обратного отсчета () называется, метод ожидания был заблокирован до того, как ток достигнет нуля. После этого будут выпущены все резьбы ожидания, и все последующие вызовы ожидания вернутся немедленно. Это явление появляется только один раз не может быть сброшено. Если вам нужно сбросить счет, рассмотрите возможность использования Cyclicbarrier.
Countdownlatch - это общий инструмент синхронизации, который имеет много применений. Используйте подсчет 1 инициализированного CountownLatch в качестве простого вкладчика открытия/блокировки, или вход: перед открытием входа, позвонив в поток CountDown (), все поток ожидает, что у него ждали у входа. Используйте n инициалов CountDownLatch, которые могут подождать поток, чтобы подождать, прежде чем поток N будет завершен, или держать его в ожидании перед определенной операцией.
Одна из полезных функций CountdownLatch заключается в том, что он не требует потока, который вызывает метод обратного отсчета, чтобы продолжить, пока он не будет подсчитываться в нуле, и, прежде чем все потоки смогут пройти через, это просто предотвращает продолжение любого потока через ожидание.
Пример: несколько спортсменов ждут приказа рефери: все спортсмены, такие как рефери и другие спортсмены
Пакет com.ljq.test.thread; .Newcachedthreadpool (); Рефери объявил результаты результата. raun () {try {System.out.println ("Thread" + Thread.currentThread (). getName () + "готовится к принятию команд"); + Thread.currentThread (). +"Результаты обработки ответов") ;;} Catch (Exception e) {e.printstacktrace ();}}; .random ()*10000); Command System.out.println («Thread» + Think.currentThread (). getName () + »отправил команду, ожидая результата»); 0 Все спортсмены на месте System.out.println ("Thread" + Thread.currentThread (). GetName () + "Результаты назад:
The Thread Pool-Thread-3 готовится принять командные потоки Pool-1-Thread-IS, готовится принять командные потоки пул-thread-2 Команда, ожидая результата результата, ожидает, что потоки результатов пул-thread-2 приняли командные потоки Pool-1-Thread-1 Pool-1-Thread-3, принял командные потоки пула-thread-3 Ответьте на командную обработку результатов потока пула-1-потока 2-х ответа потока 2 на результаты обработки команды Pool-1-Thread-1 Обработка