<pre name="code" class="java">/*
*
*
* 生产者与消费者问题。
* 要求:每生产出一个产品,消费一个产品。
* 为了保证产品P的唯一性,采用构造方法的方式传递进去。
* */
class product {
String name;
Double price;
boolean flag = false;
}
class Producer extends Thread {
product p;
int i = 0;
public Producer(product p) {
this.p = p;
}
public void run() {
while (true) {
synchronized (p) {
if (!p.flag) {
if (i % 2 == 0) {
p.name = "Cola";
p.price = 2.5;
System.out.println("生产了一个" + p.name + "价格是" + p.price);
p.flag = true;
p.notify();// 唤醒消费者进程,必须用锁对象调用
i++;
} else {
p.name = "Fanta";
p.price = 2.6;
System.out.println("生产了一个" + p.name + "价格是" + p.price);
p.flag = true;
p.notify();
i++;
}
} else {
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 等待消费者消费
}
}
}
}
}
class Customer extends Thread {
product p;
public Customer(product p) {
this.p = p;
}
public void run() {
while (true) {
synchronized (p) {
if (p.flag) {
System.out.println("消费了一个" + p.name);
p.flag = false;
p.notify();// 消费完毕,唤醒生产者生产。
} else {
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
product p = new product();
Producer producer = new Producer(p);
Customer customer = new Customer(p);
producer.start();
customer.start();
}
}
使用Java实现的简易“生产者消费者问题”
最新推荐文章于 2024-07-10 09:44:18 发布