1.CountDownLatch简介

来源:互联网 发布:ubuntu 镜像源 编辑:程序博客网 时间:2024/05/18 03:03

CountDownLatch经常用于监听某些初始化操作,等初始化操作执行完毕后,通知当前线程继续工作。

如下代码,线程1会阻塞在countDown.await()处,需要等待线程2,3

import java.util.concurrent.CountDownLatch;public class P01CountDownLatch{    public static void main(String[] args)    {        //2表示要等待两次countDown()        final CountDownLatch countDown = new CountDownLatch(2);        Thread t1 = new Thread(new Runnable()        {            @Override            public void run()            {                try                {                       System.out.println("进入线程t1,等待其他线程处理完成");                    countDown.await();//需要等待                    System.out.println("t1线程继续执行");                }                catch (InterruptedException e)                {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                            }        });        Thread t2 = new Thread(new Runnable()        {            @Override            public void run()            {                try                {                    System.out.println("进入线程t2");                    Thread.sleep(2000);                    countDown.countDown();                    System.out.println("t2线程执行完毕,通知t1线程继续执行");                }                catch (InterruptedException e)                {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                                                  }        });        Thread t3 = new Thread(new Runnable()        {            @Override            public void run()            {                try                {                    System.out.println("进入线程t3");                    Thread.sleep(3000);                    countDown.countDown();//如果这行注释掉,t1线程永远不会再执行了                    System.out.println("t3线程执行完毕,通知t1线程继续执行");                }                catch (InterruptedException e)                {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                                                  }        });        t1.start();        t2.start();        t3.start();    }}


执行结果:

原创粉丝点击