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/tech/pnotes/18737.html

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

相关推荐

发表回复

登录后才能评论