Escenario de uso:
Uno o N subprocesos, espere a que otros subprocesos completen una operación antes de continuar con la ejecución. CountDownLatch describe la relación entre uno o N subprocesos que esperan otros subprocesos.
Cómo utilizar:
- Deje que CountDownLatch cuente: CountDownLatch countDownLatch = new CountDownLatch (3);
- Espere en el hilo de espera: countDownLatch.await ();
- Reduzca el valor de recuento en otros subprocesos: countDownLatch.getCount ();
- Una vez que el número de countDownLatch.getCount () en otros subprocesos es el valor de recuento en el momento de la creación de instancias, active el subproceso en espera
public class T06_TestCountDownLatch { public static void main (String [] args) { usingJoin (); usingCountDownLatch (); } vacío estático privado usandoCountDownLatch () { Thread [] threads = new Thread [100 ]; CountDownLatch latch = new CountDownLatch (threads.length); for ( int i = 0; i <threads.length; i ++ ) { threads [i] = new Thread (() -> { int result = 0 ; para ( int j = 0; j <10000; j ++) resultado + = j; latch.countDown (); }); } para ( int i = 0; i <threads.length; i ++ ) { threads [i] .start (); } prueba { latch.await (); } catch (InterruptedException e) { e.printStackTrace (); } System.out.println ( "cierre final" ); } vacío estático privado usandoJoin () { Thread [] hilos = nuevo hilo [100 ]; for ( int i = 0; i <threads.length; i ++ ) { threads [i] = new Thread (() -> { int result = 0 ; for ( int j = 0; j <10000; j ++) result + = j; }); } para ( int i = 0; i <threads.length; i ++ ) { threads [i] .start (); } for ( int i = 0; i <threads.length; i ++ ) { try { hilos [i] .join (); } catch (InterruptedException e) { e.printStackTrace (); } } System.out.println ( "fin de la unión" ); } }