package com.qfedu.a_;
/**
* 生产者消费者模式
*/
class Goods {//桥梁,沟通两个线程
private String name;
private double price;
private boolean isProduct;//true有这个商品,不需要生产 false没这个商品,需要生产
public Goods(String name, double price, boolean isProduct) {
this.name = name;
this.price = price;
this.isProduct = isProduct;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public boolean isProduct() {
return isProduct;
}
public void setProduct(boolean product) {
isProduct = product;
}
}
class Consumer implements Runnable{//消费者线程
private Goods goods;
public Goods getGoods() {
return goods;
}
public void setGoods(Goods goods) {
this.goods = goods;
}
public Consumer(Goods goods) {
this.goods = goods;
}
@Override
public void run() {
//加锁
while (true){//一直消费
synchronized (goods){
if (goods.isProduct()){
System.out.println("消费者购买:"+goods.getName()+"价格是:"+goods.getPrice());
//消费完之后,商品被购买了,没了
goods.setProduct(false);//商品没了
goods.notify();//唤醒生产者生产
}else {
//此时没有商品 生产者正在制作商品的过程中,不需要再唤醒生产者了 消费者进行等待就好了
try {
goods.wait();
//唤醒生产者生产
// goods.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class Producer implements Runnable{//生产者线程
private Goods goods;
public Goods getGoods() {
return goods;
}
public void setGoods(Goods goods) {
this.goods = goods;
}
public Producer(Goods goods) {
this.goods = goods;
}
@Override
public void run() {
int count = 0;
while (true){//一直生产
//锁
synchronized (goods){
if (!goods.isProduct()){//没有东西 开始生产
if (count%2==0){
// System.out.println("生产者开始生产");
goods.setName("大奔");
goods.setPrice(3000);
}else {
// System.out.println("生产者开始生产");
goods.setName("奥迪");
goods.setPrice(2000);
}
//此时有车了
goods.setProduct(true);
System.out.println("生产者生产了:"+goods.getName()+"价格是:"+goods.getPrice());
count++;
//唤醒消费者 生产好了
goods.notify();
}else {
//此时有车,不用造,等待 歇会
try {
goods.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public class Demo_01 {
public static void main(String[] args) {
Goods goods = new Goods("凯迪拉克",1000,true);//此时有车
/**
* 创建生产者,消费者线程
*/
Producer producer = new Producer(goods);//生产者线程
Consumer consumer = new Consumer(goods);//消费者线程
/**
* 开启线程
*/
Thread thread = new Thread(producer);
thread.start();
Thread thread1 = new Thread(consumer);
thread1.start();
}
}
生产者消费者模式
最新推荐文章于 2024-09-14 18:46:05 发布