激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

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

實例講解Java并發(fā)編程之閉鎖

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

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

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

場景應用:
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();  //計數(shù)器減一,到達終點
  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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕一区在线观看视频 | 日韩视频中文 | 日本免费a∨| 91av日韩| 亚洲5区 | 中文字幕www | 麻豆视频在线观看免费网站 | 国产精品视频六区 | 一色一情 | 羞羞答答www网站进入 | 亚洲午夜免费 | 曰批全过程120分钟免费69 | 亚洲成人免费网站 | 国产免费让你躁在线视频 | 国产亚洲欧美在线视频 | 性欧美一区二区 | 久久国产中文 | 一级毛片免费观看 | 在线播放免费av | 成人三级电影网 | 97中文| 国产激情精品一区二区三区 | 日韩伦理电影免费观看 | 欧美一级爱爱 | 中文字幕一区2区 | 欧美一级爱爱 | 在线播放免费播放av片 | av在线电影网站 | 成人三级视频在线观看 | 中国成人在线视频 | 宅男噜噜噜66国产免费观看 | 国产视频在线观看一区二区三区 | 久久久国产电影 | 麻豆视频在线免费观看 | 伊人二本二区 | 日韩黄色精品 | 国产精品久久久久久久久久大牛 | 欧美一级片网站 | 免费99热在线观看 | 91九色网址 | 在线成人免费视频 |