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

java 生产者和消费者——Synchronized方式

java 生产者和消费者——ReentrantLock方式

java 生产者和消费者——BlockingQueue方式

/** 
* 生产者消费者问题: 容器最多放5个商品;当容器未装满时,生产者一直生产商品并放入容器中,当容器中有商品时,消费者就一直消费商品; 情景: 
* 生产者生产20个商品并被消费者消费 
*/ 
public class ProducerAndComsumerDemo {
 
private int pruductsSum = 0; 
private int FULL = 5;// 容器中最多容纳5个产品 
private Lock lock; 
private Condition notEmptyCondition; 
private Condition notFullCondition; 
private ProducerAndComsumerDemo() {
 
lock = new ReentrantLock(); 
notEmptyCondition = lock.newCondition(); 
notFullCondition = lock.newCondition(); 
} 
public static void main(String[] args) {
 
ProducerAndComsumerDemo demo1 = new ProducerAndComsumerDemo(); 
new Thread(demo1.new Producer()).start(); 
new Thread(demo1.new Consumer()).start(); 
} 
class Producer implements Runnable {
 
@Override 
public void run() {
 
for (int i = 0; i < 20; i++) {
 
try {
 
Thread.sleep(150); 
} catch (InterruptedException e) {
 
e.printStackTrace(); 
} 
lock.lock(); 
try {
 
while (pruductsSum == FULL) {
 
try {
 
System.out.println("容器里剩余" + pruductsSum + "个,生产者wait"); 
notFullCondition.await(); 
} catch (InterruptedException e) {
 
e.printStackTrace(); 
} 
} 
System.out.println("生产者 生产前 总共有 " + pruductsSum + " 个商品"); 
pruductsSum++; 
System.out.println("生产者  生产后 总共有 " + pruductsSum + " 个商品"); 
System.out.println("---------------------------------------------------------------------------"); 
notEmptyCondition.signal(); 
} finally {
 
lock.unlock(); 
} 
} 
} 
} 
class Consumer implements Runnable {
 
@Override 
public void run() {
 
for (int i = 0; i < 20; i++) {
 
try {
 
Thread.sleep(300); 
} catch (InterruptedException e) {
 
e.printStackTrace(); 
} 
lock.lock(); 
try {
 
while (pruductsSum == 0) {
 
try {
 
notEmptyCondition.await(); 
} catch (InterruptedException e) {
 
e.printStackTrace(); 
} 
} 
System.out.println("消费者 消费前 总共有 " + pruductsSum + " 个商品"); 
pruductsSum--; 
System.out.println("消费者 消费后 总共有 " + pruductsSum + " 个商品"); 
System.out.println("---------------------------------------------------------------------------"); 
notFullCondition.signal(); 
} finally {
 
lock.unlock(); 
} 
} 
} 
} 
} 

运行结果的其中一次日志

生产者 生产前 总共有 0 个商品 
生产者  生产后 总共有 1 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 1 个商品 
消费者 消费后 总共有 0 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 0 个商品 
生产者  生产后 总共有 1 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 1 个商品 
生产者  生产后 总共有 2 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 2 个商品 
消费者 消费后 总共有 1 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 1 个商品 
生产者  生产后 总共有 2 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 2 个商品 
生产者  生产后 总共有 3 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 3 个商品 
消费者 消费后 总共有 2 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 2 个商品 
生产者  生产后 总共有 3 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 3 个商品 
生产者  生产后 总共有 4 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 4 个商品 
消费者 消费后 总共有 3 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 3 个商品 
生产者  生产后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
容器里剩余5个,生产者wait 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
生产者 生产前 总共有 4 个商品 
生产者  生产后 总共有 5 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 5 个商品 
消费者 消费后 总共有 4 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 4 个商品 
消费者 消费后 总共有 3 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 3 个商品 
消费者 消费后 总共有 2 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 2 个商品 
消费者 消费后 总共有 1 个商品 
--------------------------------------------------------------------------- 
消费者 消费前 总共有 1 个商品 
消费者 消费后 总共有 0 个商品 
--------------------------------------------------------------------------- 

仅此记录

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/18738.html

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

相关推荐

发表回复

登录后才能评论