java 生产者和消费者——BlockingQueue方式详解编程语言

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

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论