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