生产者(Productor)将产品放在柜台(Counter),而消费者(Customer)从柜台
处取走产品,生产者一次只能生产固定数量的产品(比如:1), 这时柜台中不能
再放产品,此时生产者应停止生产等待消费者拿走产品,此时生产者唤醒消费者来
取走产品,消费者拿走产品后,唤醒生产者,消费者开始等待.
public class Counter {
static int num = 0;
public synchronized void add(){
if (num==0){
this.num = 1;
this.notify();
System.out.println("生产者生产了一堆臭臭!");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void sub(){
if (num!=0){
this.num = 0;
this.notify();
System.out.println("害嗨嗨!吃饱啦~");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class CustomerThread extends Thread{
Counter counter;
public CustomerThread(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
while (true){
counter.sub();
}
}
}
public class ProductorThread extends Thread{
Counter counter;
public ProductorThread(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
while (true){
counter.add();
}
}
}
public class Test {
public static void main(String[] args) {
Counter counter = new Counter();
CustomerThread customerThread = new CustomerThread(counter);
ProductorThread productorThread = new ProductorThread(counter);
customerThread.start();
productorThread.start();
}
}