package thread;
class Product extends Thread {
String name;
double price;
boolean flag = false;
}
class Producer extends Thread {
Product p;
Producer(Product p) {
this.p = p;
}
@Override
public void run() {
// TODO Auto-generated method stub
int i = 0;
while (true) {
synchronized (p) {
if (p.flag == false) {
if (i % 2 == 0) {
p.price = 6.5;
p.name = "苹果";
} else {
p.price = 2.0;
p.name = "香蕉";
}
System.out.println("生产者生产了" + p.name + p.price);
i++;//最后改状态
p.flag = true;
p.notifyAll();
} else {
try {
p.wait();
System.out.println("生产者等待");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
class Consumer extends Thread {
Product p;
public Consumer(Product p) {
this.p = p;
}
public void run() {
// TODO Auto-generated method stub
while (true) {
synchronized (p) {
if (p.flag == true) {
System.out.println("消费者消费产品" + p.name + p.price);
p.flag = false;
p.notifyAll();// 唤醒消费者去生产
} else {
try {
p.wait();
System.out.println("消费者等待");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
public class Demo5 {
public static void main(String[] args) {
Product p = new Product();
Producer producer = new Producer(p);
Consumer consumer = new Consumer(p);
producer.start();
consumer.start();
}
}

本文通过Java代码示例详细介绍了生产者-消费者模式的实现方法。利用synchronized关键字和wait/notifyAll方法来同步生产者与消费者的操作,确保线程间的正确交互。此模式在多线程环境下有效地管理资源生产和消费的过程。

被折叠的 条评论
为什么被折叠?



