多线程门闩CountDownLatch的玩法

CountDownLatch,一个同步辅助类,在完成特定的操作之前,它让一个或多个线程一直等待,

构造函数:new CountDownLatch(2);初始化门闩的长度为2;

它有两个主要方法:latch.await(),当前线程等待,直到门闩的值为0,线程才往下执行;

                                 latch.countDown(),门闩值减一;

使用await在主线程阻塞,每个子线程执行完了,就调用latch.countDown()一次,知道最后门闩为0,解开主线程的等待;

比如主线程开启多个子线程,当所有子线程都执行完了,主线程才能继续往下执行,如下:


publicclassTest {

   publicstaticvoidmain(String[] args) {

     finalCountDownLatch latch =newCountDownLatch(2);

     newThread(){

     publicvoidrun() {

          try{

              System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");

              System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");

              latch.countDown();

          }catch(InterruptedException e) {

            e.printStackTrace();

          }

  };

}.start();

newThread(){

publicvoidrun() {

try{

       System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");

       System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");

       latch.countDown();

}catch(InterruptedException e) {

        e.printStackTrace();

}

};

}.start();

try{

     System.out.println("等待2个子线程执行完毕...");

     latch.await();

     System.out.println("2个子线程已经执行完毕");

     System.out.println("继续执行主线程");

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}

你可能感兴趣的:(多线程门闩CountDownLatch的玩法)