Parece que el contador de cuenta regresiva, que llama al método de cuenta regresiva del objeto CountdownLatch, menos el contador por 1. Cuando llega a 0, todos los camareros comienzan a ejecutar.
java.util.concurrent.countdownlaatch
Una clase auxiliar sincrónica, antes de completar un conjunto de operaciones en otros hilos, permite que uno o más hilos esperen. Use un recuento dado para inicializar el CountDownLatch. Debido a que se llama el método Countdown (), el método de espera se ha bloqueado antes de que el conteo de corriente alcance cero. Después de eso, se lanzarán todos los hilos de espera, y todas las llamadas posteriores de espera regresarán de inmediato. Este fenómeno solo aparece una vez que el contenido no se puede restablecer. Si necesita restablecer el recuento, considere usar CyclicBarrier.
CountdownLatch es una herramienta de sincronización general, que tiene muchos usos. Use el contado 1 cotownlatch inicializado como un simple depositante de apertura/bloqueo, o la entrada: antes de abrir la entrada llamando a la llamada de hilo Countdown (), todos los hilos que llaman esperan han estado esperando en la entrada. Use n iniciales de CountdownLatch puede esperar un hilo para esperar antes de que se complete el hilo N, o mantenerlo esperando antes de una determinada operación.
Una de las características útiles de CountdownLatch es que no requiere que el hilo que llama al método de cuenta regresiva continúe hasta que se cuente en cero, y antes de que todos los hilos puedan pasar, solo evita que cualquier hilo continúe a través de un espera.
Ejemplo: Múltiples atletas están esperando el orden del árbitro: todos los atletas como el árbitro y otros atletas liberan los resultados después de Qi Qi
paquete com.ljq.test.thread; .NewCachedThreadPool (); El árbitro anunció los resultados del resultado. raun () {try {System.out.println ("Thread" + Thread.CurrentThread (). GetName () + "se está preparando para aceptar los comandos"); + thread.currentThread (). +"Resultados de procesamiento de comandos") ;;} Catch (Exception e) {E.PrintStackTrace ();}}; .random ()*10000)); El comando System.out.println ("Thread" + Thread.CurrentThread (). GetName () + "ha enviado el comando, esperando el resultado"); 0 Todos los atletas en su lugar.out.println ("Thread" + Thread.CurrentThread (). GetName () + "ha recibido todos los resultados de la respuesta");} Service.shutdown ();}}Resultados de retroceso:
El grupo de subprocesos de hilo 3 se está preparando para aceptar el comando de hilo de hilo-1-hilo se prepara para aceptar el comando de hilo de hilo piscina-2 se está preparando para aceptar el hilo de comando que el main pronto enviará el hilo de comando que el main ha enviado el El comando, esperando el resultado del resultado, está esperando el resultado del resultado de la agrupación de subproceso de hilo de resultado, ha aceptado el comando de hilo de hilo-1-hilo-1 piscina-1-thread-3 ha aceptado el hilo de comando piscina-3 a Responda al resultado de procesamiento del comando PROUMPLE-1-SUCHE-2 Respuesta al procesamiento de comandos Resultados de subprocesos de subproceso-1-hilo 1 Respuesta Procesamiento de comandos Resultado El subproceso de subproceso ha recibido todos los resultados de respuesta