Parece que o contador da contagem regressiva, chamando o método de contagem regressiva do objeto Countdownlatch, menos o contador em 1. Quando atinge 0, todos os garçons começam a executar.
java.util.concurrent.countdownlaatch
Uma classe auxiliar síncrona, antes de concluir um conjunto de operações em outros threads, permite que um ou mais threads esperem. Use uma dada contagem para inicializar o Countdownlatch. Como o método Countdown () é chamado, o método aguardar foi bloqueado antes que a contagem atual atinja zero. Depois disso, todos os threads de espera serão lançados e todas as chamadas subsequentes de aguardam retornarão imediatamente. Esse fenômeno aparece apenas uma vez que a contagem não pode ser redefinida. Se você precisar redefinir a contagem, considere o uso do ciclicBarrier.
O CountdownLatch é uma ferramenta de sincronização geral, que tem muitos usos. Use a contagem 1 Countwnlatch inicializou como um simples depositante de abertura/bloqueio ou a entrada: antes de abrir a entrada chamando a chamada de threads countdown (), todos os threads chamando aguardam aguardando na entrada. Use n iniciais do CountdownLatch podem esperar um thread para esperar antes que o thread n seja concluído ou mantenha -o esperando antes de uma determinada operação.
Um dos recursos úteis da contagem regressiva é que ele não requer o encadeamento que chama o método da contagem regressiva para continuar até que seja contado em zero e, antes que todos os threads possam passar, ele apenas impede que qualquer thread continue por um aguardo.
Exemplo: vários atletas estão esperando a ordem dos árbitros: todos os atletas como o árbitro e outros atletas liberam os resultados após qi qi
pacote com.ljq.test.thread; .NewcachedThThreadpool (); O árbitro anunciou os resultados do resultado. RAUN () {tente {System.out.println ("Thread" + Thread.currentThread (). getName () + "está se preparando para aceitar comandos"); + thread.currentThread (). +"Resultados de processamento de resposta") ;;} Catch (Exceção e) {E.PrintStackTrace ();}}; .Random ()*10000); o comando System.out.println ("Thread" + Thread.currentThread (). getName () + "enviou comando, esperando o resultado"); 0 Todos os atletas no local System.out.println ("Thread" + Thread.currentThread (). GetName () + "recebeu todos os resultados da resposta");Resultados das costas:
O thread pool-thread-3 está se preparando para aceitar o thread de comando pool-1-thread-está preparando para aceitar o thread de comando thread-thread-2 está se preparando para aceitar o thread de comando main em breve enviará o thread de comando main enviado o Comando, aguardando o resultado, está aguardando o resultado do resultado do resultado, o thread-thread-2 aceitou o thread de comando pool-1-thread-1 pool-1-thread-3 aceitou o thread de comando thread-thread-3 para Responda ao processo de processamento de comando Pool-1- Thread-2 Resposta aos resultados do processamento de comando Trie