开发者社区 问答 正文

[@徐雷frank][¥20]用 wait-notify 写一段代码来解决生产者-消费者问题?

问题来自Java技术沙龙的李博
Java线下沙龙报名链接:https://yq.aliyun.com/activity/796

展开
收起
李博 bluemind 2018-12-13 14:15:02 2106 分享 版权
1 条回答
写回答
取消 提交回答
  • 1.阿里云大学荣誉讲师, 2.MongoDB中文社区专家

    1、这是Java多线程编程的问题,
    2、wait是等待资源, 和 notify通知其他等待线程可以继续申请资源,继续执行。
    3、模拟多线程订单生产者和消费者:
    static class OrdersProducerThread extends Thread {

        public void run() {
            while (true) {
                // 每隔 1000 毫秒生产一个商品
    
                Thread.sleep(100);
                synchronized (list) {
                    // 当前商品满了,生产者等待
                   while(list.size<100){
                    list.add(new Orders());
                    }
                    // 当100个订单,通知等待线程处理
                    list.notifyAll();
                }
            }
        }
    }
    

    static class OrdersConsumerThread extends Thread {

        public void run() {
            while (true) {
    
                    Thread.sleep(200);
    
                synchronized (list) {
                    // 当前商品空了,消费者等待
                    if (list.size() <= 0) {
                            list.wait();
                    }
                    list.remove(0);//删除一个订单,表示处理
                    // 通知生成线程也可以
                    list.notifyAll();
                }
            }
        }
    }
    
    2019-07-17 23:20:36
    赞同 展开评论
问答分类:
问答地址: