java 生产者和消费者——Synchronized方式
java 生产者和消费者——ReentrantLock方式
java 生产者和消费者——BlockingQueue方式
利用阻塞队列如下特性实现生产者和消费者模式
- put 添加一个元素 如果队列满,则阻塞
- take 移除并返回队列头部的元素 如果队列为空,则阻塞
/**
* 生产者消费者问题: 容器最多放5个商品;当容器未装满时,生产者一直生产商品并放入容器中,当容器中有商品时,消费者就一直消费商品; 情景:
* 生产者生产20个商品并被消费者消费
*/
public class ProducerAndComsumerDemo {
private int pruductsSum = 0;
private BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(5);
public static void main(String[] args) {
ProducerAndComsumerDemo demo = new ProducerAndComsumerDemo();
new Thread(demo.new Producer()).start();
new Thread(demo.new Consumer()).start();
}
class Producer implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
try {
queue.put(i);
System.out.println("生产者 生产前 总共有 " + pruductsSum + " 个商品");
pruductsSum++;
System.out.println("生产者 生产后 总共有 " + pruductsSum + " 个商品");
System.out.println("---------------------------------------------------------------------------");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(300);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
Integer take = queue.take();
System.out.println("消费 " + take);
System.out.println("消费者 消费前 总共有 " + pruductsSum + " 个商品");
pruductsSum--;
System.out.println("消费者 消费后 总共有 " + pruductsSum + " 个商品");
System.out.println("---------------------------------------------------------------------------");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
运行结果的其中一次日志
生产者 生产前 总共有 0 个商品
生产者 生产后 总共有 1 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 1 个商品
生产者 生产后 总共有 2 个商品
---------------------------------------------------------------------------
消费 0
消费者 消费前 总共有 2 个商品
消费者 消费后 总共有 1 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 1 个商品
生产者 生产后 总共有 2 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 2 个商品
生产者 生产后 总共有 3 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 3 个商品
生产者 生产后 总共有 4 个商品
---------------------------------------------------------------------------
消费 1
消费者 消费前 总共有 4 个商品
消费者 消费后 总共有 3 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 3 个商品
生产者 生产后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费 2
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费 3
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 4
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 5
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 6
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
---------------------------------------------------------------------------
消费 7
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 8
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 9
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费 10
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费 11
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费 12
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 13
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 6 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 5 个商品
---------------------------------------------------------------------------
消费 14
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 5 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费 15
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
消费 16
消费者 消费前 总共有 4 个商品
消费者 消费后 总共有 3 个商品
---------------------------------------------------------------------------
消费 17
消费者 消费前 总共有 3 个商品
消费者 消费后 总共有 2 个商品
---------------------------------------------------------------------------
消费 18
消费者 消费前 总共有 2 个商品
消费者 消费后 总共有 1 个商品
---------------------------------------------------------------------------
消费 19
消费者 消费前 总共有 1 个商品
消费者 消费后 总共有 0 个商品
---------------------------------------------------------------------------
仅此记录
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18737.html