一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 實例講解Java并發編程之閉鎖

實例講解Java并發編程之閉鎖

2019-12-16 13:17junjie JAVA教程

這篇文章主要介紹了實例講解Java并發編程之閉鎖,閉鎖相當于一扇門,在閉鎖到達結束狀態之前,這扇門一直是關閉著的,沒有任何線程可以通過,當到達結束狀態時,這扇門才會打開并容許所有線程通過,需要的朋友可以參考下

閉鎖相當于一扇門,在閉鎖到達結束狀態之前,這扇門一直是關閉著的,沒有任何線程可以通過,當到達結束狀態時,這扇門才會打開并容許所有線程通過。它可以使一個或多個線程等待一組事件發生。閉鎖狀態包括一個計數器,初始化為一個正式,正數表示需要等待的事件數量。countDown方法遞減計數器,表示一個事件已經發生,而await方法等待計數器到達0,表示等待的事件已經發生。CountDownLatch強調的是一個線程(或多個)需要等待另外的n個線程干完某件事情之后才能繼續執行。

場景應用:
10個運動員準備賽跑,他們等待裁判一聲令下就開始同時跑,當最后一個人通過終點的時候,比賽結束。10個運動相當于10個線程,這里關鍵是控制10個線程同時跑起來,還有怎么判斷最后一個線程到達終點。可以用2個閉鎖,第一個閉鎖用來控制10個線程等待裁判的命令,第二個閉鎖控制比賽結束。

?
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
import java.util.concurrent.CountDownLatch;
 
class Aworker implements Runnable {
 private int num;
 private CountDownLatch begin;
 private CountDownLatch end;
 
 public Aworker(int num, final CountDownLatch begin, final CountDownLatch end) {
 this.num = num;
 this.begin = begin;
 this.end = end;
 }
 
 @Override
 public void run() {
 // TODO Auto-generated method stub
 try {
  System.out.println(num + "th people is ready");
  begin.await();  //準備就緒
 } catch (InterruptedException e) {
  e.printStackTrace();
 } finally {
  end.countDown();  //計數器減一,到達終點
  System.out.println(num + "th people arrive");
 }
 }
}
 
public class Race {
 public static void main(String[] args) {
 int num = 10;
 CountDownLatch begin = new CountDownLatch(1);
 CountDownLatch end = new CountDownLatch(num);
 
 for (int i = 1; i <= num; i++) {
  new Thread(new Aworker(i, begin, end)).start();
 }
 
 try {
  Thread.sleep((long) (Math.random() * 5000));
 } catch (InterruptedException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 }
 System.out.println("judge say : run !");
 begin.countDown(); //裁判一聲令下開始跑
 long startTime = System.nanoTime();
 try {
  end.await(); //等待結束
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } finally {
  long endTime = System.nanoTime();
  System.out.println("judge say : all arrived !");
  System.out.println("spend time: " + (endTime - startTime));
 }
 }
}

輸出

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1th people is ready
2th people is ready
4th people is ready
6th people is ready
3th people is ready
10th people is ready
8th people is ready
5th people is ready
7th people is ready
9th people is ready
judge say : run !
1th people arrive
4th people arrive
10th people arrive
5th people arrive
2th people arrive
judge say : all arrived !
9th people arrive
7th people arrive
8th people arrive
3th people arrive
6th people arrive
spend time: 970933

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 放荡护士玩3p口述 | chinesezoozvideos | 好男人在线观看免费高清2019韩剧 | 四大美女思春艳史片 | 色老板最新网站视频地址 | 骚虎最新网址 | 精品第一国产综合精品蜜芽 | 女人zooxx禽交 | 精品欧美小视频在线观看 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 欧美日韩一区二区三区韩大 | 国产精品久久久精品视频 | 欧美va在线观看 | 男女激情视频1000辣妞范 | sese在线观看 | 国产自产2023最新麻豆 | 日本68xxxxxxxxx24 日本 片 成人 在线 | 四虎在线免费 | 91成人爽a毛片一区二区 | 亚洲视频一区二区在线观看 | 日本福利片国产午夜久久 | 草草草草视频 | 久草高清在线 | 午夜一级| haodiaose在线精品免费观看 | 大片毛片女女女女女女女 | 99精品国产美女福到在线不卡 | 色网在线观看 | 男女视频在线观看网站 | 亚洲 欧美 中文 日韩 视频 | 日韩精品一区二区三区中文版 | 久久天天综合 | 黑人巨大初黑人解禁作品 | 国产色司机在线视频免费观看 | 99精品国产久热在线观看66 | 沉香如屑西瓜视频免费观看完整版 | 超级乱淫寡妇 | 日本高清中文字幕一区二区三区 | 无人视频在线观看完整版高清 | 动漫美女胸被狂揉扒开吃奶动态图 | 99爱爱|