多线程门闩CountDownLatch的玩法

作者: 激情的狼王 | 来源:发表于2017-08-18 15:44 被阅读0次

    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的玩法

        本文链接:https://www.haomeiwen.com/subject/odearxtx.html