CountDownLatch 计数器门闩

来源:互联网 发布:能弹琴的软件 编辑:程序博客网 时间:2024/04/28 13:47

我只能说中华文化博大精深,最开始的时候还是不认识闩字的,百度了一下,
闩[shuān]。
从型上分析,就是门上插把棍子,锁住什么东西。

CountDownLatch 就是把线程关起来,不许出来,得先干完活。

CountDownLatch 计数器门闩/** * CountDownLatch  计数器门闩  * 该任务是如果完成了5个任务,那么才去执行发工资的事情 *  * @author beiyaoyao */public class CountDownLatchDemo implements Runnable {    //告知CountDownLatch 需要完成5件事情    static final CountDownLatch countDownLatch = new CountDownLatch(5);    static final CountDownLatchDemo countDownLatchDemo = new CountDownLatchDemo();    @Override    public void run() {            try {                //模拟任务的发生                Thread.sleep(1000);                System.out.println(Thread.currentThread().getId()+ " thread misson complete");                //告知CountDownLatch.await();完成了一件,知道全部完成。                countDownLatch.countDown();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }    }    public static void main(String[] args) throws InterruptedException {        ExecutorService exec =  Executors.newFixedThreadPool(5);        for(int i = 0 ; i  < 5 ; i ++){            exec.submit(countDownLatchDemo);        }        //等待检查是否完成        countDownLatch.await();        //执行        System.out.println("run");        exec.shutdown();    }}

输出结果
10 thread misson complete
9 thread misson complete
8 thread misson complete
11 thread misson complete
12 thread misson complete
run

如果我们对线程不加以处理

public class CountDownLatchDemoNo implements Runnable {    static final CountDownLatchDemoNo countDownLatchDemo = new CountDownLatchDemoNo();    @Override    public void run() {            System.out.println(Thread.currentThread().getId()+ " thread misson complete");    }    public static void main(String[] args) throws InterruptedException {        ExecutorService exec =  Executors.newFixedThreadPool(5);        for(int i = 0 ; i  < 5 ; i ++){            exec.submit(countDownLatchDemo);        }        //执行        System.out.println("run");        exec.shutdown();    }}

执行结果
8 thread misson complete
10 thread misson complete
9 thread misson complete
11 thread misson complete
run
12 thread misson complete

run的输出有可能会在任何一个任务执行完或者没有执行任何一个任务的时候执行。

0 0
原创粉丝点击