生产者(Productor)将产品放在柜台(Counter),而消费者(Customer)从柜台
处取走产品,生产者一次只能生产固定数量的产品(比如:1), 这时柜台中不能
再放产品,此时生产者应停止生产等待消费者拿走产品,此时生产者唤醒消费者来
取走产品,消费者拿走产品后,唤醒生产者,消费者开始等待.
package 生产与消费;
public class Counter {
int num=0;
public synchronized void add(){
if(num==0){
num=1;
this.notify();//唤醒消费者进程
System.out.println("生产者生产了一件商品");
}else {
try {
this.wait();//生产者线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void sub(){
if(num==1){
num=0;
this.notify();//唤醒生产者进程
System.out.println("消费者消费了一件商品");
}else {
try {
this.wait();//消费者线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package 生产与消费;
public class ProductThread extends Thread{
Counter counter;
public ProductThread(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
counter.add();
}
}
}
package 生产与消费;
public class ConsumeThread extends Thread{
Counter counter;
public ConsumeThread(Counter counter) {
this.counter = counter;
}
public void run() {
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
counter.sub();
}
}
}
package 生产与消费;
public class Test {
public static void main(String[] args) {
Counter counter=new Counter();
ProductThread productThread=new ProductThread(counter);
ConsumeThread consumeThread=new ConsumeThread(counter);
productThread.start();
consumeThread.start();
}
}