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 © 啥都寫點
主站蜘蛛池模板:
亚洲午夜精品久久久久久app
|
亚洲性猛交XXXX
|
日本亚洲精品色婷婷在线影院
|
免费精品无码AV片在线观看
|
亚洲AV无码国产精品色午友在线
|
99久久免费国产精品热
|
久久久精品国产亚洲成人满18免费网站
|
亚洲AV日韩综合一区
|
免费A级毛片无码久久版
|
男女猛烈无遮掩视频免费软件
|
亚洲国产精品成人一区
|
永久免费精品影视网站
|
中文字幕亚洲一区
|
无码AV片在线观看免费
|
亚洲妓女综合网99
|
免费观看大片毛片
|
曰批免费视频播放免费
|
亚洲伊人久久精品影院
|
亚洲一级毛片免费观看
|
亚洲高清毛片一区二区
|
亚洲人成网站观看在线播放
|
丝袜捆绑调教视频免费区
|
亚洲AV日韩AV高潮无码专区
|
黄页网站免费在线观看
|
美女裸免费观看网站
|
亚洲午夜未满十八勿入网站2
|
热re99久久6国产精品免费
|
亚洲成年网站在线观看
|
亚洲精品和日本精品
|
无码国产精品一区二区免费3p
|
久久精品国产99国产精品亚洲
|
日韩午夜免费视频
|
国产成人无码区免费网站
|
亚洲精品在线不卡
|
四虎影视免费永久在线观看
|
中文字幕无码一区二区免费
|
久久亚洲最大成人网4438
|
亚洲精品国产高清嫩草影院
|
1000部拍拍拍18勿入免费视频软件
|
亚洲日韩精品无码专区加勒比☆
|
亚洲国产婷婷六月丁香
|