瘋狂
STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
CountDownLatch 簡介和例子
Posted on 2011-07-04 17:14
瘋狂
閱讀(9970)
評論(3)
編輯
收藏
所屬分類:
java
、
concurrent
在一些應用場合中,某段程序需要等待某個條件達到要求后才能執行,或者等待一定長的時間后此行,從jdk1.5開始就可以使用CountDownLatch實現,
CountDownLatch類是一個同步倒數計數器,構造時傳入int參數,該參數就是計數器的初始值,每調用一次countDown()方法,計數器減1,計數器大于0 時,await()方法會阻塞后面程序執行,直到計數器為0,await(long timeout, TimeUnit unit),是等待一定時間,然后執行,不管計數器是否到0了。
下面舉一個等車的例子:
10個同學上車,車等待同學上車,如果有等待時間限制,到時間就開走,不管學生上沒上完。如果沒有等待時間,學生上完了再開:
public
class
CountDownLatchTest
{
public
static
int
numberOfPeople
=
10
;
//
等車的學生數
public
static
boolean
isGone
=
false
;
//
車開的標志
public
static
int
carWaitTime
=
3
;
//
車等的時間
public
static
void
main(String[] args)
throws
InterruptedException
{
CountDownLatch waitStudentsGetOn
=
new
CountDownLatch(numberOfPeople);
new
Thread(
new
GetOn(waitStudentsGetOn)).start();
waitStudentGetOn(waitStudentsGetOn);
//
等所有的學生上車
driveHome();
//
開車走
}
private
static
void
waitStudentGetOn(CountDownLatch waitStudentsGetOn)
throws
InterruptedException
{
System.out.println(
"
趕緊的,抓緊時間上車..
"
);
waitStudentsGetOn.await(carWaitTime, TimeUnit.SECONDS);
//
等5秒,還沒上車,就開走。。
}
private
static
void
driveHome()
throws
InterruptedException
{
System.out.println(
"
開車,鞋兒破 帽兒破 身上的袈裟破 你笑我 他笑我 一把扇兒破
"
);
isGone
=
true
;
}
}
class
GetOn
implements
Runnable
{
private
CountDownLatch waitStudentsGetOn;
GetOn(CountDownLatch waitStudentsGetOn)
{
this
.waitStudentsGetOn
=
waitStudentsGetOn;
}
public
void
run()
{
for
(
int
i
=
0
; i
<
CountDownLatchTest.numberOfPeople; i
++
)
{
try
{
if
(CountDownLatchTest.isGone)
{
System.out.println(
"
媽的,還差:
"
+
waitStudentsGetOn.getCount()
+
"
個沒娃上車呢.怎么車走了
"
);
break
;
}
boolean
goonSuccess
=
new
Student(i
+
1
).getOn();
//
順序上車
if
(goonSuccess)waitStudentsGetOn.countDown();
}
catch
(InterruptedException e)
{}
if
(waitStudentsGetOn.getCount()
!=
0l
)
{
System.out.println(
"
還差:
"
+
(waitStudentsGetOn.getCount())
+
"
個沒上車
"
);
}
else
{
System.out.println(
"
都上車了
"
);
}
}
}
class
Student
{
private
int
myNum;
//
學生編號
public
Student(
int
num)
{
this
.myNum
=
num;
}
//
上車
public
boolean
getOn()
throws
InterruptedException
{
Thread.currentThread().sleep(
new
Random().nextInt(
2
)
*
1000
);
//
上車使用的時間,隨機
if
(CountDownLatchTest.isGone)
{
return
false
;
//
不能上了,上車失敗
}
System.out.print(
"
編號為:
"
+
myNum
+
"
的同學上車了..
"
);
return
true
;
}
}
}
評論
#
re: CountDownLatch 簡介和例子
回復
更多評論
2014-01-19 12:02 by
bo_hai
carWaitTime = 3 是等待3秒吧?
#
re: CountDownLatch 簡介和例子
回復
更多評論
2014-01-19 12:09 by
bo_hai
這個模擬實例很好。博主對 CountDownLatch 理解很正確。
#
re: CountDownLatch 簡介和例子
回復
更多評論
2014-12-14 14:06 by
xsank
看到了countdownlatch的await用法,謝樓主分享
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
相關文章:
JAVA Thread Dump 分析綜述
關于java RMI在多網卡下(或者啟動360,百度,騰訊等wifi共享下)無法連接問題(java.rmi.ConnectException: Connection refused to host: xx)
Quartz+Spring的集群配置(轉)
java.awt.headless=true
dom4j通過xpath查詢xml (轉)
深入探討 Java 類加載器
Java ClassLoader基礎知識
synchronized 要注意的地方
關于java.lang.IllegalMonitorStateException
ThreadPoolExecutor運轉機制詳解 .
Powered by:
BlogJava
Copyright © 瘋狂
日歷
<
2011年7月
>
日
一
二
三
四
五
六
26
27
28
29
30
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
1
2
3
4
5
6
公告
公眾號:
QQjava交流群:
51374316
留言簿
(11)
給我留言
查看公開留言
查看私人留言
隨筆分類
all 生活雜談(16)
android(18)
apache項目(20)
chart(1)
concurrent(5)
database(70)
dwr(3)
flex(6)
hibernate(25)
java (135)
javafx(2)
javascript
java安全(8)
java性能(19)
jbpm(1)
jquery(4)
linux(17)
lucene(1)
netty(3)
nginx(1)
others(2)
questions(31)
questions_hander(28)
spring(32)
struts(9)
swing
UML(2)
unix(13)
web(45)
webservice(9)
xml(5)
敏捷(6)
方法論(28)
架構(21)
測試(1)
緩存
網絡通訊(9)
讀代碼(6)
項目管理(19)
相冊
我的相冊
搜索
積分與排名
積分 - 2840037
排名 - 2
最新隨筆
1.? 后續內容請移步公眾號“duomi88”
2.?Netty百萬級推送服務(轉)
3.?Netty 概述(轉)
4.?Netty優雅退出機制和原理(轉)
5.?使用JavaMail SearchTerm 收取郵件
6.?JAVA Thread Dump 分析綜述
7.?oracle 索引字段包含date類型,使用spring jdbc更新時不走索引,而是走table access full的問題
8.?FTP主動模式和被動模式的比較(轉載)
9.?關于java RMI在多網卡下(或者啟動360,百度,騰訊等wifi共享下)無法連接問題(java.rmi.ConnectException: Connection refused to host: xx)
10.?(轉)Oracle數據庫如何授權收費(Database Licensing)
11.? 成功的 Web 應用系統性能測試 (轉載)
12.?It is indirectly referenced from required .class file異常
13.?(轉)svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
14.?automation服務器不能創建對象 解決辦法
15.?ERROR: transport error 202: gethostbyname: unknown host 解決辦法
16.?JavaScript 跨瀏覽器事件處理(轉)
17.?函數聲明 VS 函數表達式(轉)
18.?ORA-06548錯誤
19.?項目規劃與管理記錄2
20.?tmpFile.renameTo(classFile) failed
21.?redhat6.4 64位安裝rlwrap
22.?ora-01031:insufficient privileges
23.?mysql遠程連接問題 Access denied for user 'root'@' ip ' (using password: YES)
24.?dbcp重連(轉)
25.?解決Vmware Workstation上安裝Linux系統不能SSH遠程連接的問題
26.?URL最大長度限制(轉)
27.?用MyEclipse測試發送email時報java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
28.?我應該采用哪一種 WSDL 樣式?(轉載)
29.?linux 掛載ntfs usb 出現mount: unknown filesystem type 'ntfs'
30.?11g oracle 用戶密碼過期問題
最新評論
1.?re: Oracle物化視圖創建全過程(轉)
評論內容較長,點擊標題查看
--ya
2.?re: Oracle物化視圖創建全過程(轉)
評論內容較長,點擊標題查看
--ya
3.?re: 11g oracle 用戶密碼過期問題
問問
--是是是
4.?re: mysql遠程連接問題 Access denied for user 'root'@' ip ' (using password: YES)
asdfsadf
--asdf
5.?re: struts(il8n)實現國際化的一個例子
在啥地方
--正常
主站蜘蛛池模板:
亚洲人成网站色7799
|
亚洲一区免费观看
|
亚洲av日韩av不卡在线观看
|
国产人成免费视频网站
|
极品色天使在线婷婷天堂亚洲
|
99爱在线观看免费完整版
|
亚洲videos
|
亚洲精品国产精品乱码视色
|
毛片网站免费在线观看
|
两个人www免费高清视频
|
最新国产成人亚洲精品影院
|
区三区激情福利综合中文字幕在线一区亚洲视频1
|
久久久久久久免费视频
|
无码AV动漫精品一区二区免费
|
亚洲综合激情九月婷婷
|
久久久久亚洲AV无码专区首
|
日美韩电影免费看
|
午夜免费福利视频
|
一个人看的免费视频www在线高清动漫
|
亚洲色偷偷偷网站色偷一区
|
亚洲乱码中文字幕综合234
|
成年人免费的视频
|
大地资源在线资源免费观看
|
日本精品人妻无码免费大全
|
亚洲午夜av影院
|
成年男女免费视频网站
|
日韩视频免费在线观看
|
国产精品亚洲专区在线播放
|
97免费人妻在线视频
|
一出一进一爽一粗一大视频免费的
|
亚洲熟妇无码爱v在线观看
|
亚洲女初尝黑人巨高清
|
高清在线亚洲精品国产二区
|
免费观看黄网站在线播放
|
久久久久久久99精品免费观看
|
日本中文字幕免费看
|
亚洲AV成人精品日韩一区
|
亚洲av乱码一区二区三区
|
久久亚洲精品成人av无码网站
|
亚洲一区二区三区偷拍女厕
|
亚洲国产成人影院播放
|