生产者/消费者问题
生产者(Productor)将产品放在柜台(Counter),而消费者(Customer)从柜台处取走产品,生产者一次只能生产固定数量的产品(比如:1), 这时柜台中不能再放产品,此时生产者应停止生产等待消费者拿走产品,此时生产者唤醒消费者来取走产品,消费者拿走产品后,唤醒生产者,消费者开始等待.
//柜台
public class Bar {
static int num;
static Object obj = new Object();
public Bar(int num) {
this.num = num;
}
}
//消费者
public class Customer extends Thread {
Bar bar = new Bar(10);
@Override
public void run() {
while (true) {
synchronized (Bar.obj) {
Bar.obj.notify();
if (bar.num > 0) {
bar.num--;
System.out.println("消费者取出商品,当前商品数量:" + bar.num);
}
try {
Bar.obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
//生产者
public class Producer extends Thread {
Bar bar = new Bar(10);
@Override
public void run() {
while (true) {
synchronized (Bar.obj) {
Bar.obj.notify();
if (bar.num == 0) {
bar.num++;
System.out.println("生产者生产商品,当前商品数量:" + bar.num);
}
try {
Bar.obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
//测试
public class Test {
public static void main(String[] args) {
new Bar(10);
Customer customer = new Customer();
customer.setName("消费者");
customer.start();
Producer producer = new Producer();
producer.setName("生产者");
producer.start();
}
}