package test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
public class BlockingQueueTest {
public static void main(String[] args) throws InterruptedException {
final BlockingQueue queue = new ArrayBlockingQueue(20);
for (int i = 0; i < 20; i++) {
System.out.println("i"+i);
queue.put(i);
}
// for(int i=0;i<2;i++){
// new Thread("线程1"){
// public void run(){
// while(true){
// try {
// Thread.sleep(100);
// System.out.println(Thread.currentThread().getName() + "准备放数据!");
// queue.put(1);
// System.out.println(Thread.currentThread().getName() + "已经放了数据," +
// "队列目前有" + queue.size() + "个数据");
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// }
// }
//
// }.start();
// }
new Thread("线程2") {
public void run() {
boolean isActive = true;
while (isActive) {
try {
// 将此处的睡眠时间分别改为100和1000,观察运行结果
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()
+ "准备取数据!");
Integer out = (Integer) queue.poll(1, TimeUnit.MINUTES);
if(out == null){
isActive = false;
}
System.out.println("取的次数" + out);
System.out.println(Thread.currentThread().getName()
+ "已经取走数据," + "队列目前有" + queue.size() + "个数据");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程退出");
}
}.start();
}
}
BlockingQueue的使用
最新推荐文章于 2019-04-15 19:12:23 发布