java多线程实践-CountDownLatch

  java多线程及并发包的知识点很多,在日常工作中很少用到,所以很难有较深刻的理解。这段时间计划深入学习一下juc,在深入源码前,先弄清楚每个类的用途,死记硬背不如找一个容易理解的例子来加深印象。

CountDownLatch

   CountDownLatch称之为闭锁,主要用于等待一组线程执行完毕再统一执行后面的程序,这样描述比较乏味难以记忆,在网上看到一个比较好的例子,拿过来分享一下。

例子

每天起早贪黑的上班,父母每天也要上班,话说今天定了个饭店,一家人一起吃个饭,通知大家下班去饭店集合。假设:3个人在不同的地方上班,必须等到3个人到场才能吃饭,用程序如何实现呢?

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public class LatchTest {

private static final CountDownLatch countDownLatch = new CountDownLatch(3);

public static void main(String[] args) throws InterruptedException {

new Thread() {
@Override
public void run() {
fatherToRes();
countDownLatch.countDown();
}
}.start();
new Thread() {
@Override
public void run() {
motherToRes();
countDownLatch.countDown();
}
}.start();
new Thread() {
@Override
public void run() {
meToRes();
countDownLatch.countDown();
}
}.start();

countDownLatch.await();
togetherToEat();


}

/**
* 模拟爸爸去饭店
*/
public static void fatherToRes() {
System.out.println("爸爸步行去饭店需要3小时。");
}

/**
* 模拟我去饭店
*/
public static void motherToRes() {
System.out.println("妈妈挤公交去饭店需要2小时。");
}

/**
* 模拟妈妈去饭店
*/
public static void meToRes() {
System.out.println("我乘地铁去饭店需要1小时。");
}

/**
* 模拟一家人到齐了
*/
public static void togetherToEat() {
System.out.println("一家人到齐了,开始吃饭");
}


}

总结

  这个小例子给人的印象深刻,一下就理解了如何使用闭锁。先学会用,接下来研究一下源码。

引用

  1. Java 并发专题 :闭锁 CountDownLatch 之一家人一起吃个饭
-------------本文结束感谢您的阅读-------------

本文标题:java多线程实践-CountDownLatch

文章作者:小建儿

发布时间:2018年06月27日 - 10:06

最后更新:2018年12月14日 - 18:12

原始链接:http://yajian.github.io/java多线程实践-CountDownLatch/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。