基于有界队列实现生产者与消费者模式
将有界队列视作一个空间有限的奶箱
那么往奶箱中放奶时,如果空间已满不能放,此时就是阻塞队列的put方法被阻塞。
从奶箱中取奶时,如果奶箱中没有奶,此时相当于就是阻塞队列的take方法被阻塞。
代码实现
//定义一个容量为3的奶箱
private static ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(3);
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i < 10; i++) {
try {
System.out.println("奶工开始放第"+i+"瓶奶");
queue.put(String.valueOf(i));
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
try {
//奶工开始放奶后,等待五秒钟,消费者才可以开始取奶
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i < 10; i++) {
try {
System.out.println("顾客开始取第"+queue.take()+"瓶奶");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}