CountDownLatch uno o más subprocesos para esperar a que otros subprocesos completen la operación y regresen de manera uniforme

CountDownLatch:

Permite que uno o más subprocesos esperen a que otros subprocesos completen sus operaciones.

CountDownLatchRecibe un intparámetro de tipo que indica el número de subprocesos de trabajo que deben esperar.

método:

método ilustrar
esperar() Haga que el hilo actual ingrese a la cola de sincronización y espere hasta que latchse reduzca el valor 0o se interrumpa el hilo actual, el hilo actual se despertará.
espera (tiempo de espera largo, unidad TimeUnit) esperar() con tiempo de espera
cuenta regresiva() Disminuya latchel valor 1. Si se reduce , todos los hilos 0que esperan esto se despertarán .latch
obtenerContar() El valor obtenido latch.

Ejemplo de código:

//创建线程池,线程池的核心数可根据业务场景进行动态调整
ExecutorService executorService = Executors.newFixedThreadPool(10);

//如果有n个线程,那么就指定CountDownLatch 的计数器为 n
final CountDownLatch latch = new CountDownLatch(10);
for (int j = 0; j <10 ; j++) {
    executorService.execute(()->{
        log.info("子线程 start time:{},线程名称:{}", DateUtil.now(),Thread.currentThread().getName());
//此处是需要执行的业务操作
        log.info("子线程 end time:{},线程名称:{}", DateUtil.now(),Thread.currentThread().getName());
        //当前线程调用此方法,则计数器减一
        latch.countDown();
    });
}
try {
    //主线程调用此方法,直到计数器的数值为0,主线程才开始处理
    latch.await();
    log.info("所有子线程执行完毕,主线程继续执行");
} catch (InterruptedException e) {
    e.printStackTrace();
}
//销毁线程池
executorService.shutdown();

Resumen del artículo:

CountDownLatch tiene dos métodos principales:

cuenta regresiva() y espera().

Método countDown(): se utiliza para disminuir el contador en uno, que generalmente es llamado por el hilo que ejecuta la tarea;

Método await (): coloca el hilo que llama a este método en un estado de espera, que generalmente es llamado por el hilo principal.

Lo que hay que tener en cuenta aquí es que el método countDown() no estipula que un hilo solo pueda llamarlo una vez. Cuando el mismo hilo llama al método countDown() varias veces, el contador disminuirá en uno cada vez; además , El método await () no se estipula que solo un subproceso puede ejecutar este método. Si varios subprocesos ejecutan el método await () al mismo tiempo, estos subprocesos estarán en estado de espera y compartirán el mismo bloqueo en compartido. modo.

Supongo que te gusta

Origin blog.csdn.net/weixin_43005845/article/details/125381585
Recomendado
Clasificación