用线程来完成,生产消费者模型
//生产消费模型
public class WaitNotifyText {
public static void main(String[] args) {
//商品对象
Product p=new Product();
//开启线程
new Thread(new Productor(p)).start();
new Thread(new Productor(p)).start();
new Thread(new Consumer(p)).start();
new Thread(new Consumer(p)).start();
}
}
//模拟生产过程---线程逻辑代码
class Productor implements Runnable{
//引入商品类
Product p;
public Productor(Product p){
this.p=p;
}
//重写
@Override
public void run() {
while (true) {
synchronized (p) {
while(p.flag==true)//加上while保证线程一定会进行判断
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
// 此时生产的最大值
int max = 1000 - p.getNum();// 减去上次剩余
// 随机生产的商品数量
int count = (int) (Math.random() * (max + 1));
// 设置新的商品数量
p.setNum(p.getNum() + count);
// 输出
System.out.println("此次生产了" + count + "个商品,还剩余" + p.getNum() + "个商品...");
//唤醒
//p.notify();//随机唤醒一个
p.notifyAll();
p.flag=true;
}
}
}
}
//模拟消费过程
class Consumer implements Runnable{
// 引入商品类
Product p;
public Consumer(Product p){
this.p=p;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (p) {
while(p.flag==false)
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 此次消费最大值
int max = p.getNum();
// 此次消费的随机商品数量
int count = (int) (Math.random() * (max + 1));
// 设置新的商品数量
p.setNum(p.getNum() - count);
// 输出
System.out.println("此次消费了" + count + "个商品,还剩余" + p.getNum() + "个商品...");
//唤醒
//p.notify();
p.notifyAll();
p.flag=false;
}
}
}
}
//商品类
class Product{
//商品数量
private int num;
//
boolean flag=true;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}