併發學習計劃-ArrayBlockingQueue和LinkedBlockingQueue02
兩個東西,看名字就知道是先進先出的佇列,不過這個blocking是什麼意思,很顯然這是“塊”的意思,也就是這是一個阻塞佇列。
舉個生活中的例子,籃子裡面最多隻能放5個蘋果,一個人往籃子裡面放,一個人往籃子裡面拿,假設籃子的容量滿了,就要等一個人拿出來之後才能放,籃子空了也要等一個人把蘋果放進去才能拿。
上面的例子有點消費生產者模式的意思。
跟今天我們要說的BlockingQueue有啥關係呢,這兩個BlockingQueue就好像這個籃子一樣。滿了就等有容量的時候再裝,空了就等有東西的時候再拿。
唯一的區別就是,ArrayBlockingQueue的內部是陣列,LinkedBlockingQueue的內部是連結串列。
拿ArrayBlockingQueue舉例子。
如果寫出了下面的程式碼,就完了。
BlockingQueue<String> a = new ArrayBlockingQueue<String>(5);
for (int i = 0; i < 10; i++) {
try {
a.put(i + "");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("111");
因為永遠執行不到最後面的列印語句,會永遠卡在那裡,容量只有5,但是要放10個東西。
我們可以這樣做:
BlockingQueue<String> a = new ArrayBlockingQueue<String>(5);
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
a.put(i + "");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
String str;
try {
while ((str = a.take()) != null) {
System.out.println("take : " + str);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
寫兩個執行緒,一個放一個拿,這樣就不會阻塞了,阻塞的好處就是,可以在一定程度上節約空間。
我們可以在這些佇列中存放執行緒哦,假設有10個任務,5個執行緒,把任務丟進去,讓5個執行緒去執行,哪個執行緒執行完了就去執行下一個任務,任務也可以用佇列儲存起來,這樣也不會弄混。
good idea!
相關文章
- 學習態度和學習計劃
- java併發面試常識之ArrayBlockingQueueJava面試BloC
- Java併發包原始碼學習系列:阻塞佇列實現之ArrayBlockingQueue原始碼解析Java原始碼佇列BloC
- 學習Rust 併發程式設計Rust程式設計
- java併發程式設計工具類JUC第二篇:ArrayBlockingQueueJava程式設計BloC
- 併發容器之ArrayBlockingQueue和LinkedBlockingQueue實現原理詳解BloC
- 學習計劃:
- 學習計劃
- 《java學習二》併發程式設計Java程式設計
- 近期的學習計劃和目標
- java學習計劃Java
- IOS學習計劃iOS
- Java 併發程式設計學習總結Java程式設計
- SQLite學習手冊(鎖和併發控制)SQLite
- 【Java併發程式設計】一、為什麼需要學習併發程式設計?Java程式設計
- 學習 Go併發模型Go模型
- Doug Lea併發設計模式(JUC學習前奏)設計模式
- 學習計劃的安排
- Java的學習計劃Java
- 10 -1學習計劃
- SAP BI 學習計劃
- java併發包學習系列:jdk併發容器JavaJDK
- 執行緒基礎(二十一)-併發容器-ArrayBlockingQueue(上)執行緒BloC
- CPA-會計學習計劃
- 併發程式設計原理學習:synchronized關鍵字程式設計synchronized
- 2018 - 讀書計劃 & 學習計劃
- Python-學習計劃Python
- iOS入門學習計劃iOS
- 演算法學習計劃演算法
- 最近的學習計劃安排
- 簡明高效的 Java 併發程式設計學習指南Java程式設計
- 併發程式設計基礎底層原理學習(一)程式設計
- 併發程式設計基礎底層原理學習(二)程式設計
- 併發程式設計基礎底層原理學習(四)程式設計
- java併發程式設計學習15--CompletableFuture(二)Java程式設計
- 《筆記》之學習高併發筆記
- JAVA 學習併發筆記(一)Java筆記
- (一)Java併發學習筆記Java筆記