Cyh的博客
Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220
导航
BlogJava
首页
新随笔
联系
聚合
管理
公告
一直努力努力努力,像奴隶奴隶奴隶!~~
<
2024年12月
>
日
一
二
三
四
五
六
24
25
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
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
随笔档案
(25)
2011年5月 (1)
2010年4月 (12)
2010年1月 (1)
2009年12月 (2)
2009年6月 (1)
2009年4月 (4)
2009年2月 (4)
文章分类
(219)
Android(26)
DB(5)
J2EE(31)
J2SE(79)
JavaScript(15)
others(47)
SOA&Web Service(1)
中间件(1)
软件工程(12)
软件架构(2)
文章档案
(220)
2011年8月 (1)
2010年12月 (23)
2010年11月 (2)
2010年8月 (5)
2010年7月 (2)
2010年6月 (2)
2010年5月 (1)
2010年4月 (12)
2010年3月 (28)
2010年2月 (5)
2010年1月 (23)
2009年12月 (39)
2009年6月 (14)
2009年5月 (31)
2009年3月 (2)
2009年2月 (29)
2009年1月 (1)
新闻档案
(66)
2010年10月 (1)
2010年9月 (5)
2010年8月 (11)
2010年7月 (21)
2010年6月 (13)
2010年5月 (8)
2010年4月 (5)
2009年11月 (2)
相册
Ryan
收藏夹
(7)
JAVA(7)
最新随笔
1. 集成FCKeditor 3.5.3
2. android自适应屏幕方向和大小
3. Android游戏开发之旅(二十) 双按事件捕获
4. Android游戏开发之旅(十八) SoundPool类
5. Android游戏开发之旅(十九) 分辨率大全
6. Android游戏开发之旅(十七) 图像渐变特效
7. Android游戏开发之旅(十六) 异步音乐播放
8. Android游戏开发之旅(十四) 游戏开发实战一
9. Android游戏开发之旅(十五) 按键中断处理
10. Android游戏开发之旅(十二)Sensor重力感应(2)
搜索
最新评论
1. re: struts2 checkboxlist标签的使用
同居同意同意
--yuk
2. re: struts2 checkboxlist标签的使用
ss
--d
3. re: JavaMail(4)--使用POP3接收邮件
邮件信息可以打印出来,可是下载邮件会出错是什么原因?
--琳喵喵0721
4. re: JavaMail(4)--使用POP3接收邮件
评论内容较长,点击标题查看
--流风
5. re: 操作PDF文件
评论内容较长,点击标题查看
--ly.wolf
阅读排行榜
1. struts2 checkboxlist标签的使用(18226)
2. struts2异常拦截器(5857)
3. struts2迭代标签(3845)
4. 用freemind 秒杀Spring Security(1914)
5. 加载顺序会影响对spring bean 的调用。(1489)
线程--CountDownLatch
Posted on 2009-12-23 23:20
啥都写点
阅读(460)
评论(0)
编辑
收藏
所属分类:
J2SE
本例介绍第二种同步装置:CountDownLatch,它维护一个计数器,等待这个CountDownLatch的线程必须等到计数器为0时才可以继续。本例模拟服务器的启动,假设启动一个服务器需要初始化3个组件,当3个组件初始化完毕时,服务器才算成功启动。
构造CountDownLatch对象时,需要制定计数器的初始值,该值必须大于等于0,一旦对象被创建,其初始值将不能被改变。
CountDownLatch的await方法使当前线程进入等待状态,直到计数器为0.
CountDownLatch的countDown方法使计数器减1.
import
java.util.concurrent.CountDownLatch;
import
java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors;
/** */
/**
* CountDownLatch是个计数器,它有一个初始数,
* 等待这个计数器的线程必须等到计数器倒数到零时才可继续。
*/
public
class
CountDownLatchTest
{
/** */
/**
* 初始化组件的线程
*/
public
static
class
ComponentThread
implements
Runnable
{
//
计数器
CountDownLatch latch;
//
组件ID
int
ID;
//
构造方法
public
ComponentThread(CountDownLatch latch,
int
ID)
{
this
.latch
=
latch;
this
.ID
=
ID;
}
public
void
run()
{
//
初始化组件
System.out.println(
"
Initializing component
"
+
ID);
try
{
Thread.sleep(
500
*
ID);
}
catch
(InterruptedException e)
{
}
System.out.println(
"
Component
"
+
ID
+
"
initialized!
"
);
//
将计数器减一
latch.countDown();
}
}
/** */
/**
* 启动服务器
*/
public
static
void
startServer()
throws
Exception
{
System.out.println(
"
Server is starting.
"
);
//
初始化一个初始值为3的CountDownLatch
CountDownLatch latch
=
new
CountDownLatch(
3
);
//
起3个线程分别去启动3个组件
ExecutorService service
=
Executors.newCachedThreadPool();
service.submit(
new
ComponentThread(latch,
1
));
service.submit(
new
ComponentThread(latch,
2
));
service.submit(
new
ComponentThread(latch,
3
));
service.shutdown();
//
等待3个组件的初始化工作都完成
latch.await();
//
当所需的三个组件都完成时,Server就可继续了
System.out.println(
"
Server is up!
"
);
}
public
static
void
main(String[] args)
throws
Exception
{
CountDownLatchTest.startServer();
}
}
--
学海无涯
Powered by:
BlogJava
Copyright © 啥都写点