不知道写的对不对,望大家指点
1、代码
package com.jh.java.thread;
/**
* 模拟场景:
*
* 生产者和消费者模式
* 库存为0,首先开始生产,最大库存为100。库存将满时 开始消费。
* 消费到库存 不够时 则扩大再生产。
* 如此反复
* @author JIHAN
*
*/
public class MyTest3 {
public static void main(String[] args) {
Storehouse house = new Storehouse();
new Thread(new Producer(house)).start();
new Thread(new Consumer(house)).start();
}
}
/**
* 仓库
* @author JIHAN
*
*/
class Storehouse{
private int stockMax = 100;
private int stock = 0;
public synchronized void produce(int i) {
if(stock+i >stockMax) {
System.out.println("警告: 若生产" + i + "个,库存"+stock+" 将已满。。。暂停生产 。。。 ");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
stock += i;
System.out.println(Thread.currentThread().getName() + " 生产 " + i + "个, 当前库存 " + stock);
notifyAll();
}
public synchronized void con(int i) {
if(stock+i < 0) {
System.out.println("警告: 若消费" + i + "个,库存"+stock+"将不够。。。。需生产 。。。 稍等。。。 ");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
stock += i;
System.out.println(Thread.currentThread().getName() + " 消费 " + i + "个, 当前库存 " + stock);
notifyAll();
}
}
/**
* 生产者
* @author JIHAN
*
*/
class Producer implements Runnable{
private Storehouse storehouse;
public Producer(Storehouse storehouse) {
this.storehouse = storehouse;
}
public void run() {
while(true) {
storehouse.produce((int)(Math.random()*10));
}
}
}
class Consumer implements Runnable{
private Storehouse storehouse;
public Consumer(Storehouse storehouse) {
this.storehouse = storehouse;
}
public void run() {
while(true) {
storehouse.con(-(int)(Math.random()*10));
}
}
}
2、结果:
Thread-0 生产 2个, 当前库存 87
Thread-0 生产 0个, 当前库存 87
Thread-0 生产 4个, 当前库存 91
Thread-0 生产 7个, 当前库存 98
Thread-0 生产 0个, 当前库存 98
警告: 若生产3个,库存98 将已满。。。暂停生产 。。。
Thread-1 消费 -5个, 当前库存 93
Thread-1 消费 -1个, 当前库存 92
Thread-1 消费 -4个, 当前库存 88
Thread-1 消费 -6个, 当前库存 82
Thread-1 消费 -3个, 当前库存 79
Thread-1 消费 -2个, 当前库存 77
Thread-1 消费 -5个, 当前库存 72
Thread-1 消费 -3个, 当前库存 69
Thread-1 消费 -9个, 当前库存 60
Thread-1 消费 -6个, 当前库存 54
Thread-1 消费 -7个, 当前库存 47
Thread-1 消费 -2个, 当前库存 45
Thread-1 消费 -3个, 当前库存 42
Thread-1 消费 -9个, 当前库存 33
Thread-1 消费 -7个, 当前库存 26
Thread-1 消费 -5个, 当前库存 21
Thread-1 消费 -3个, 当前库存 18
Thread-1 消费 -4个, 当前库存 14
Thread-1 消费 -7个, 当前库存 7
Thread-1 消费 -7个, 当前库存 0
警告: 若消费-6个,库存0将不够。。。。需生产 。。。 稍等。。。
Thread-0 生产 3个, 当前库存 3
Thread-0 生产 1个, 当前库存 4
Thread-0 生产 6个, 当前库存 10
Thread-0 生产 9个, 当前库存 19
Thread-0 生产 6个, 当前库存 25
Thread-0 生产 7个, 当前库存 32
Thread-0 生产 1个, 当前库存 33
Thread-0 生产 7个, 当前库存 40
Thread-0 生产 1个, 当前库存 41
Thread-0 生产 8个, 当前库存 49
Thread-0 生产 6个, 当前库存 55
Thread-0 生产 0个, 当前库存 55
Thread-0 生产 9个, 当前库存 64
Thread-0 生产 3个, 当前库存 67
Thread-0 生产 7个, 当前库存 74
Thread-0 生产 4个, 当前库存 78
Thread-0 生产 4个, 当前库存 82
Thread-0 生产 9个, 当前库存 91
Thread-0 生产 1个, 当前库存 92
Thread-0 生产 0个, 当前库存 92
Thread-0 生产 7个, 当前库存 99
警告: 若生产3个,库存99 将已满。。。暂停生产 。。。
Thread-1 消费 -6个, 当前库存 93
Thread-1 消费 -9个, 当前库存 84
Thread-1 消费 -4个, 当前库存 80
Thread-1 消费 -3个, 当前库存 77
Thread-1 消费 -6个, 当前库存 71
Thread-1 消费 0个, 当前库存 71
Thread-1 消费 -4个, 当前库存 67