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游戲開發之旅(二十) 雙按事件捕獲
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標簽的使用(18234)
2.?struts2異常攔截器(5862)
3.?struts2迭代標簽(3847)
4.?用freemind 秒殺Spring Security(1920)
5.?加載順序會影響對spring bean 的調用。(1491)
線程--BlockingQueue
Posted on 2009-12-24 21:59
啥都寫點
閱讀(1035)
評論(0)
編輯
收藏
所屬分類:
J2SE
本例介紹一個特殊的隊列:BlockingQueue,如果BlockingQueue是空的,從BlockingQueue取東西的操作將會被阻斷進入等待狀態,直到BlockingQueue進了東西才會被喚醒,同樣,如果BlockingQueue是滿的,任何試圖往里存東西的操作也會被阻斷進入等待狀態,直到BlockingQueue里有空間時才會被喚醒繼續操作。
本例再次實現前面介紹的籃子程序,不過這個籃子中最多能放得蘋果數不是1,可以隨意指定。當籃子滿時,生產者進入等待狀態,當籃子空時,消費者等待。
BlockingQueue定義的常用方法如下:
add(anObject):把anObject加到BlockingQueue里,如果BlockingQueue可以容納,則返回true,否則拋出異常。
offer(anObject):表示如果可能的話,將anObject加到BlockingQueue里,即如果BlockingQueue可以容納,則返回true,否則返回false。
put(anObject):把anObject加到BlockingQueue里,如果BlockingQueue沒有空間,則調用此方法的線程被阻斷直到BlockingQueue里有空間再繼續。
poll(time):取走BlockingQueue里排在首位的對象,若不能立即取出,則可以等time參數規定的時間,取不到時返回null。
take():取走BlockingQueue里排在首位的對象,若BlockingQueue為空,阻斷進入等待狀態直到BlockingQueue有新的對象被加入為止。
BlockingQueue有四個具體的實現類,根據不同需求,選擇不同的實現類:
ArrayBlockingQueue:規定大小的BlockingQueue,其構造函數必須帶一個int參數來指明其大小。其所含的對象是以FIFO(先入先出)順序排序的。
LinkedBlockingQueue:大小不定的BlockingQueue,若其構造函數帶一個規定大小的參數,生成的BlockingQueue有大小限制,若不帶大小參數,所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定。其所含的對象是以FIFO順序排序的。
PriorityBlockingQueue:類似于LinkedBlockingQueue,但其所含對象的排序不是FIFO,而是依據對象的自然排序順序或者是構造函數所帶的Comparator決定的順序。
SynchronousQueue:特殊的BlockingQueue,對其的操作必須是放和取交替完成的。
LinkedBlockingQueue和ArrayBlockingQueue比較起來,它們背后所用的數據結構不一樣,導致LinkedBlockingQueue的數據吞吐量要大于ArrayBlockingQueue,但在線程數量很大時其性能的可預見性低于ArrayBlockingQueue。
import
java.util.concurrent.ArrayBlockingQueue;
import
java.util.concurrent.BlockingQueue;
import
java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors;
/** */
/**
* BlockingQueue是一種特殊的Queue,若BlockingQueue是空的,
* 從BlockingQueue取東西的操作將會被阻斷進入等待狀態直到BlocingkQueue進了新貨才會被喚醒。
* 同樣,如果BlockingQueue是滿的任何試圖往里存東西的操作也會被阻斷進入等待狀態,
* 直到BlockingQueue里有新的空間才會被喚醒繼續操作。
* BlockingQueue提供的方法主要有:
* add(anObject): 把anObject加到BlockingQueue里,如果BlockingQueue可以容納返回true,否則拋出IllegalStateException異常。
* offer(anObject):把anObject加到BlockingQueue里,如果BlockingQueue可以容納返回true,否則返回false。
* put(anObject):把anObject加到BlockingQueue里,如果BlockingQueue沒有空間,調用此方法的線程被阻斷直到BlockingQueue里有新的空間再繼續。
* poll(time):取出BlockingQueue里排在首位的對象,若不能立即取出可等time參數規定的時間。取不到時返回null。
* take():取出BlockingQueue里排在首位的對象,若BlockingQueue為空,阻斷進入等待狀態直到BlockingQueue有新的對象被加入為止。
*
* 根據不同的需要BlockingQueue有4種具體實現:
* (1)ArrayBlockingQueue:規定大小的BlockingQueue,其構造函數必須帶一個int參數來指明其大小。其所含的對象是以FIFO(先入先出)順序排序的。
* (2)LinkedBlockingQueue:大小不定的BlockingQueue,若其構造函數帶一個規定大小的參數,生成的BlockingQueue有大小限制,
* 若不帶大小參數,所生成的BlockingQueue的大小由Integer.MAX_VALUE來決定。其所含的對象是以FIFO(先入先出)順序排序的。
* LinkedBlockingQueue和ArrayBlockingQueue比較起來,它們背后所用的數據結構不一樣,
* 導致LinkedBlockingQueue的數據吞吐量要大于ArrayBlockingQueue,但在線程數量很大時其性能的可預見性低于ArrayBlockingQueue。
* (3)PriorityBlockingQueue:類似于LinkedBlockingQueue,但其所含對象的排序不是FIFO,而是依據對象的自然排序順序或者是構造函數所帶的Comparator決定的順序。
* (4)SynchronousQueue:特殊的BlockingQueue,對其的操作必須是放和取交替完成的。
*
* 下面是用BlockingQueue來實現Producer和Consumer的例子
*/
public
class
BlockingQueueTest
{
/** */
/**
* 定義裝蘋果的籃子
*/
public
static
class
Basket
{
//
籃子,能夠容納3個蘋果
BlockingQueue
<
String
>
basket
=
new
ArrayBlockingQueue
<
String
>
(
3
);
//
生產蘋果,放入籃子
public
void
produce()
throws
InterruptedException
{
//
put方法放入一個蘋果,若basket滿了,等到basket有位置
basket.put(
"
An apple
"
);
}
//
消費蘋果,從籃子中取走
public
String consume()
throws
InterruptedException
{
//
get方法取出一個蘋果,若basket為空,等到basket有蘋果為止
return
basket.take();
}
}
//
測試方法
public
static
void
testBasket()
{
//
建立一個裝蘋果的籃子
final
Basket basket
=
new
Basket();
//
定義蘋果生產者
class
Producer
implements
Runnable
{
public
void
run()
{
try
{
while
(
true
)
{
//
生產蘋果
System.out.println(
"
生產者準備生產蘋果:
"
+
System.currentTimeMillis());
basket.produce();
System.out.println(
"
生產者生產蘋果完畢:
"
+
System.currentTimeMillis());
//
休眠300ms
Thread.sleep(
300
);
}
}
catch
(InterruptedException ex)
{
}
}
}
//
定義蘋果消費者
class
Consumer
implements
Runnable
{
public
void
run()
{
try
{
while
(
true
)
{
//
消費蘋果
System.out.println(
"
消費者準備消費蘋果:
"
+
System.currentTimeMillis());
basket.consume();
System.out.println(
"
消費者消費蘋果完畢:
"
+
System.currentTimeMillis());
//
休眠1000ms
Thread.sleep(
1000
);
}
}
catch
(InterruptedException ex)
{
}
}
}
ExecutorService service
=
Executors.newCachedThreadPool();
Producer producer
=
new
Producer();
Consumer consumer
=
new
Consumer();
service.submit(producer);
service.submit(consumer);
//
程序運行5s后,所有任務停止
try
{
Thread.sleep(
5000
);
}
catch
(InterruptedException e)
{
}
service.shutdownNow();
}
public
static
void
main(String[] args)
{
BlockingQueueTest.testBasket();
}
}
--
學海無涯
Powered by:
BlogJava
Copyright © 啥都寫點
主站蜘蛛池模板:
大地资源免费更新在线播放
|
亚洲国产精品无码久久青草
|
亚洲欧好州第一的日产suv
|
国产成人精品男人免费
|
在线观看黄片免费入口不卡
|
亚洲国产美女福利直播秀一区二区
|
麻豆国产VA免费精品高清在线
|
中文字幕免费观看视频
|
ass亚洲**毛茸茸pics
|
亚洲国产成人爱av在线播放
|
99re在线视频免费观看
|
色噜噜的亚洲男人的天堂
|
久久久久亚洲AV成人片
|
全部免费毛片在线
|
亚洲成人免费网址
|
成人男女网18免费视频
|
十八禁在线观看视频播放免费
|
涩涩色中文综合亚洲
|
亚洲国产精品不卡在线电影
|
国产成人高清精品免费鸭子
|
99精品免费观看
|
一个人免费观看视频在线中文
|
伊人久久综在合线亚洲2019
|
日本特黄特黄刺激大片免费
|
日本免费大黄在线观看
|
香港经典a毛片免费观看看
|
亚洲毛片基地日韩毛片基地
|
亚洲综合区小说区激情区
|
中文字幕无码免费久久99
|
国内精品久久久久影院免费
|
免费人成又黄又爽的视频在线电影
|
亚洲另类春色校园小说
|
亚洲动漫精品无码av天堂
|
国产jizzjizz免费看jizz
|
麻豆一区二区免费播放网站
|
久久免费视频观看
|
jizz免费在线观看
|
国产亚洲精彩视频
|
亚洲色大成网站www永久网站
|
精品亚洲aⅴ在线观看
|
亚洲妇熟XXXX妇色黄
|