阻塞隊列-BlockingQueue (搬遷至此)

隊列具有先進先出的特點,成爲經常應用於生產-消費者模式的數據結構。
1.將一個對象放到隊列尾部,如果隊列已滿,就等待直到有空閒節點。
2.從隊列頭部取一個對象,如果沒有對象,就等待直到有對象可取。
3.在存取隊列的過程中,鎖定隊列對象,不允許其它線程訪問隊列。
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class TestBlockingQueue {
public static void main(String[] args){
//創建能容納10個整數的隊列
final BlockingQueue<Integer> queue=new LinkedBlockingQueue<Integer>(10);
final Integer enInt=new Integer(-0);
Runnable setter=new Runnable(){
public void run() {
try {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){

queue.put(new Integer(i));
System.out.println(Thread.currentThread().getName()+" "+i);


}
queue.put(new Integer(0));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

};
new Thread(setter).start();
//創建兩個讀隊列的線程
for(int j=0;j<2;j++){
Runnable getter=new Runnable(){

public void run() {
try {
while(true){

Thread.sleep(500);
Integer num=queue.take();
//隊列無對象
if(num.intValue()==0){
queue.put(new Integer(0));
break;
}
System.out.println(Thread.currentThread().getName()+" "+num.intValue());

}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub

}

};
new Thread(getter).start();
}
}

}
發佈了69 篇原創文章 · 獲贊 8 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章