开发者社区> 问答> 正文

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

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

展开
收起
李博 bluemind 2018-12-13 14:15:02 2028 0
1 条回答
写回答
取消 提交回答
  • 1.阿里云大学讲师,主讲《微服务Spring Cloud设计与开发实战》《MongoDB高级实战》等课程 2.MongoDB中文社区专家 3.《MongoDB实战》第2版译者 5.吉林大学计算机科学学士、上海交通大学硕士

    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
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载