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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产自在现线拍400部 | 亚洲精品中文字幕第一区 | 四虎永久在线精品波多野结衣 | 果冻传媒林予曦图片 | chinese男男gayxxx| heyzo在线观看 | 亚洲视频免费在线观看 | 美国美女hd18 | 无人区大片免费播放器 | 美女黄金大片视频免费看 | 男人j放进女人的p免费看视频 | 接吻吃胸摸下面啪啪教程 | 91庥豆果冻天美精东蜜桃传媒 | 欧洲第一页 | 成人欧美一区二区三区白人 | 国产裸露片段精华合集链接 | 青青青国产精品国产精品久久久久 | 521色香蕉网在线观看免费 | 爽好舒服宝贝添奶吻戏 | 国产一二三区视频 | 视频一区二区三区欧美日韩 | 水野朝阳厨房系列在线观看 | 日韩大片在线播放 | 手机国产乱子伦精品视频 | 91视频免费网站 | 超级碰碰免费视频 | 日老逼| 日本红色高清免费观看 | 9久热久爱免费精品视频在线观看 | 国产成人亚洲综合91精品555 | 99资源在线观看 | 轻轻色在线视频中文字幕 | 日韩欧免费一区二区三区 | 色综合天天综合网站中国 | 欧美精品亚洲精品日韩专区va | 国产一卡二卡3卡4卡四卡在线视频 | 日韩国产成人精品视频 | 欧美a级v片在线观看一区 | 15同性同志18 | 久久热这里只有 精品 | 色五婷婷 |