Cyh的博客
Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220
導航
BlogJava
首頁
新隨筆
聯系
聚合
管理
公告
一直努力努力努力,像奴隸奴隸奴隸!~~
<
2025年7月
>
日
一
二
三
四
五
六
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
8
9
常用鏈接
我的隨筆
我的文章
我的評論
我的參與
最新評論
隨筆檔案
(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標簽的使用(18242)
2.?struts2異常攔截器(5868)
3.?struts2迭代標簽(3852)
4.?用freemind 秒殺Spring Security(1925)
5.?加載順序會影響對spring bean 的調用。(1494)
線程--BlockingQueue
Posted on 2009-12-24 21:59
啥都寫點
閱讀(1040)
評論(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 © 啥都寫點
主站蜘蛛池模板:
亚洲精品无码精品mV在线观看
|
国产一卡2卡3卡4卡无卡免费视频
|
亚洲色欲色欱wwW在线
|
亚洲精品无码不卡在线播HE
|
aa毛片免费全部播放完整
|
免费观看国产网址你懂的
|
a级在线观看免费
|
日本人的色道www免费一区
|
亚洲成AV人片久久
|
久久久久成人片免费观看蜜芽
|
亚洲日本中文字幕天堂网
|
久久亚洲国产伦理
|
国产午夜亚洲精品国产
|
亚洲AV色欲色欲WWW
|
avtt天堂网手机版亚洲
|
亚洲aⅴ天堂av天堂无码麻豆
|
久久免费视频观看
|
免费乱理伦在线播放
|
亚洲人成综合网站7777香蕉
|
噜噜综合亚洲AV中文无码
|
亚洲va久久久久
|
国产午夜亚洲精品不卡
|
亚洲中文字幕乱码AV波多JI
|
色老板亚洲视频免在线观
|
亚洲一级毛片视频
|
中文字幕亚洲情99在线
|
免费看美女午夜大片
|
久久免费线看线看
|
成人免费视频69
|
国产精品亚洲视频
|
久久精品国产亚洲AV电影
|
91亚洲国产成人精品下载
|
免费在线观看一区
|
2020因为爱你带字幕免费观看全集
|
亚洲第一网站免费视频
|
亚洲AV无码久久久久网站蜜桃
|
亚洲欧美日韩综合俺去了
|
中文字幕手机在线免费看电影
|
香蕉高清免费永久在线视频
|
亚洲人成网站18禁止一区
|
亚洲日本国产乱码va在线观看
|