Java实现生产者消费者模式

 

//表示生产者消费者交互的容器
public class MilkBox {
    public static int bottles = 0;
}
//消费者
public class Consumer implements Runnable {
    private String lock = "";
    public Consumer(String lock) {
        this.lock = lock;
    }
    @Override
    public void run() {
        synchronized (lock){    //表示获取到lock对象的锁
            while(true){
                if(MilkBox.bottles == 0){
                    try {
                        lock.wait();    //释放掉lock对象的锁,进入阻塞队列
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                MilkBox.bottles --;
                System.out.println("消费者消费之后,奶瓶数量为:" + MilkBox.bottles);
                lock.notify();        //通知其他阻塞的线程获得锁
            }
        }
    }
}
//生产者
public class Producer implements Runnable {
    private String lock = "";
    public Producer(String lock){
        this.lock = lock;
    }
    @Override
    public void run() {
        synchronized (lock){
            while(true){
                if(MilkBox.bottles > 0){
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                MilkBox.bottles ++;
                System.out.println("生产者生产后,奶瓶的数量为:" + MilkBox.bottles);
                lock.notify();
            }
        }
    }
}

//测试
public class Test {
public static void main(String[] args) {
String lock = "";
new Thread(new Consumer(lock)).start();
new Thread(new Producer(lock)).start();
  }
}

 

 

posted @ 2020-09-26 14:05  superRapStar  阅读(243)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css