package day15;
/**
* @生产者与消费者问题(内部类实现)
* 规定:消费时不生产,生产时不消费
* @Author 代码晓菜鸡
* @Date 2021/3/12
*/
public class Test3 {
public static void main(String[] args) {
Clerk clerk = new Clerk();
//生产者
new Thread(new Runnable() {
@Override
public void run() {
synchronized (clerk) {
while (true) {//无限生产次数
if (clerk.productNumber == 0) {//为0时表示无产品,开始生产
System.out.println("商品数为0,开始生产");
while (clerk.productNumber < 4) {
clerk.productNumber++;//增加产品
System.out.println("库存:" + clerk.productNumber);
}
System.out.println("产品数为" + clerk.productNumber + "结束生产");
clerk.notify();//唤醒消费者线程
}else {
try {
clerk.wait();//生产者线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}, "生产者").start();
//消费者
new Thread(new Runnable() {
@Override
public void run() {
synchronized (clerk) {
while (true) {//无限消费次数
if (clerk.productNumber == 4) {//为4时表示满库存,开始消费
System.out.println("商品数为4,开始消费");
while (clerk.productNumber > 0) {
clerk.productNumber--;//消费产品
System.out.println("库存:" + clerk.productNumber);
}
System.out.println("产品数为," + clerk.productNumber + "结束消费");
clerk.notify();//唤醒生产者线程
}else {
try {
clerk.wait();//消费者线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}, "消费者").start();
}
}
class Clerk {
public static int productNumber = 0;
}
Java中的生产者与消费者问题
最新推荐文章于 2022-12-06 15:47:44 发布