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();
}
}
}