• java并发编程(十三)经典问题生产者消费者问题


    生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。

        这里实现如下情况的生产--消费模型:

          生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名--2--> 内容--2”,消费者不断交替地取得这两组数据,这里的姓名--1”和“姓名--2”模拟为数据的名称,“内容--1 ”和“内容--2 ”模拟为数据的内容。

         由于本程序中牵扯到线程运行的不确定性,因此可能会出现以下问题:

         1、假设生产者线程刚向数据存储空间添加了数据的名称,还没有加入该信息的内容,程序就切换到了消费者线程,消费者线程将把信息的名称和上一个信息的内容联系在一起;

         2、生产者生产了若干次数据,消费者才开始取数据,或者是,消费者取完一次数据后,还没等生产者放入新的数据,又重复取出了已取过的数据。

     

         问题1很明显要靠同步来解决,问题2则需要线程间通信,生产者线程放入数据后,通知消费者线程取出数据,消费者线程取出数据后,通知生产者线程生产数据,这里用wait/notify机制来实现。

    实例代码 请见 git管理器   https://git.oschina.net/wenjieyatou/Thread_testAll/tree/master/src/com/wenjie/

    另外,在run方法中,二者循环的次数要相同,否则,当一方的循环结束时,另一方的循环依然继续,它会阻塞在wait()方法处,而等不到对方的notify通知。

  • 相关阅读:
    Django之AJAX
    Django中的csrf相关装饰器
    Django的中间件及WSGI
    Django之Cookie和Session
    Django之ORM操作(重要)
    Django的View(视图)和路由系统
    Django之url上的include,URL命名和反向解析,命名空间
    Django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag
    kvm 宿主机不兼容
    kvm io限制
  • 原文地址:https://www.cnblogs.com/wenjieyatou/p/6209847.html
Copyright © 2020-2023  润新知