Cyh的博客
Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220
導航
BlogJava
首頁
新隨筆
聯系
聚合
管理
公告
一直努力努力努力,像奴隸奴隸奴隸!~~
<
2025年5月
>
日
一
二
三
四
五
六
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
7
常用鏈接
我的隨筆
我的文章
我的評論
我的參與
最新評論
隨筆檔案
(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游戲開發(fā)之旅(二十) 雙按事件捕獲
4.?Android游戲開發(fā)之旅(十八) SoundPool類
5.?Android游戲開發(fā)之旅(十九) 分辨率大全
6.?Android游戲開發(fā)之旅(十七) 圖像漸變特效
7.?Android游戲開發(fā)之旅(十六) 異步音樂播放
8.? Android游戲開發(fā)之旅(十四) 游戲開發(fā)實戰(zhàn)一
9.?Android游戲開發(fā)之旅(十五) 按鍵中斷處理
10.?Android游戲開發(fā)之旅(十二)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標簽的使用(18234)
2.?struts2異常攔截器(5862)
3.?struts2迭代標簽(3847)
4.?用freemind 秒殺Spring Security(1920)
5.?加載順序會影響對spring bean 的調用。(1491)
線程--Exchanger
Posted on 2009-12-24 21:31
啥都寫點
閱讀(238)
評論(0)
編輯
收藏
所屬分類:
J2SE
本例介紹第四個同步裝置:Exchanger,它讓兩個線程呼喚信息。本實例模擬服務生和顧客,服務生往空杯子中倒水,顧客從裝滿水的杯子中喝水,然后互換杯子,服務生接著倒水,顧客接著喝水。
初始化Exchanger對象時,可以通過泛型指定杯子能交換的信息類型。如“new Exchanger<String>;” 表示只能交換String類型的信息。
Exchanger的exchanger方法表示當前線程準備交換信息,等待其他線程與它交換信息。當有其他線程調用該Exchanger對象的exchange方法時,立即交換信息。
import
java.util.concurrent.Exchanger;
/** */
/**
* Exchanger讓兩個線程可以互換信息。
* 例子中服務生線程往空的杯子里倒水,顧客線程從裝滿水的杯子里喝水,
* 然后通過Exchanger雙方互換杯子,服務生接著往空杯子里倒水,顧客接著喝水,
* 然后交換,如此周而復始。
*/
public
class
ExchangerTest
{
//
描述一個裝水的杯子
public
static
class
Cup
{
//
標識杯子是否有水
private
boolean
full
=
false
;
public
Cup(
boolean
full)
{
this
.full
=
full;
}
//
添水,假設需要5s
public
void
addWater()
{
if
(
!
this
.full)
{
try
{
Thread.sleep(
5000
);
}
catch
(InterruptedException e)
{
}
this
.full
=
true
;
}
}
//
喝水,假設需要10s
public
void
drinkWater()
{
if
(
this
.full)
{
try
{
Thread.sleep(
10000
);
}
catch
(InterruptedException e)
{
}
this
.full
=
false
;
}
}
}
public
static
void
testExchanger()
{
//
初始化一個Exchanger,并規(guī)定可交換的信息類型是杯子
final
Exchanger
<
Cup
>
exchanger
=
new
Exchanger
<
Cup
>
();
//
初始化一個空的杯子和裝滿水的杯子
final
Cup initialEmptyCup
=
new
Cup(
false
);
final
Cup initialFullCup
=
new
Cup(
true
);
//
服務生線程
class
Waiter
implements
Runnable
{
public
void
run()
{
Cup currentCup
=
initialEmptyCup;
try
{
int
i
=
0
;
while
(i
<
2
)
{
System.out.println(
"
服務生開始往杯子中添水:
"
+
System.currentTimeMillis());
//
往空的杯子里加水
currentCup.addWater();
System.out.println(
"
服務生添水完畢:
"
+
System.currentTimeMillis());
//
杯子滿后和顧客的空杯子交換
System.out.println(
"
服務生等待與顧客交換杯子:
"
+
System.currentTimeMillis());
currentCup
=
exchanger.exchange(currentCup);
System.out.println(
"
服務生與顧客交換杯子完畢:
"
+
System.currentTimeMillis());
i
++
;
}
}
catch
(InterruptedException ex)
{
}
}
}
//
顧客線程
class
Customer
implements
Runnable
{
public
void
run()
{
Cup currentCup
=
initialFullCup;
try
{
int
i
=
0
;
while
(i
<
2
)
{
System.out.println(
"
顧客開始喝水:
"
+
System.currentTimeMillis());
//
把杯子里的水喝掉
currentCup.drinkWater();
System.out.println(
"
顧客喝水完畢:
"
+
System.currentTimeMillis());
//
將空杯子和服務生的滿杯子交換
System.out.println(
"
顧客等待與服務生交換杯子:
"
+
System.currentTimeMillis());
currentCup
=
exchanger.exchange(currentCup);
System.out.println(
"
顧客與服務生交換杯子完畢:
"
+
System.currentTimeMillis());
i
++
;
}
}
catch
(InterruptedException ex)
{
}
}
}
new
Thread(
new
Waiter()).start();
new
Thread(
new
Customer()).start();
}
public
static
void
main(String[] args)
{
ExchangerTest.testExchanger();
}
}
--
學海無涯
Powered by:
BlogJava
Copyright © 啥都寫點
主站蜘蛛池模板:
亚洲校园春色小说
|
国产一区二区三区亚洲综合
|
免费看韩国黄a片在线观看
|
亚洲欧美日韩中文高清www777
|
亚洲AV无码乱码在线观看性色扶
|
久久久久久免费一区二区三区
|
亚洲熟妇av午夜无码不卡
|
亚洲性日韩精品国产一区二区
|
91大神免费观看
|
免费中文字幕视频
|
亚洲一区二区三区夜色
|
国产高清免费在线
|
久久青草免费91观看
|
国产午夜亚洲精品不卡
|
久久综合亚洲色HEZYO社区
|
成人亚洲综合天堂
|
69免费视频大片
|
国产免费伦精品一区二区三区
|
最新亚洲春色Av无码专区
|
亚洲А∨精品天堂在线
|
久热中文字幕在线精品免费
|
亚洲天堂免费在线视频
|
亚洲an日韩专区在线
|
亚洲日韩乱码中文无码蜜桃臀网站
|
成全高清视频免费观看
|
日韩免费高清大片在线
|
免费大片av手机看片
|
亚洲宅男精品一区在线观看
|
亚洲精品无码永久中文字幕
|
国产又长又粗又爽免费视频
|
91频在线观看免费大全
|
久久免费视频观看
|
在线播放免费人成视频网站
|
亚洲另类无码一区二区三区
|
亚洲欧洲日产国产综合网
|
久久影视综合亚洲
|
国产精品国产自线拍免费软件
|
免费电影在线观看网站
|
一级毛片在线免费看
|
中文字幕免费在线看
|
国产天堂亚洲国产碰碰
|