生产者-消费者设计模式
一、生产者消费者设计模式 1、中间队列 一段内存空间,且可存取; 2、两种角色 (1)生产者:生产数据; (2)消费者:消费数据。 3、三种关系 (1)生产者与生产者的互斥关系; (2)消费者与消费者的互斥关系; (3)生产者与消费者的互斥且同步关系。 二、实现方式 1、使用synchronized(wait()和notify()) 2、使用Lock实现(await()和signal()) 3、阻塞队列实现 三、生产者-消费者模型的优点 1、解耦:降低生产者和消费之间的依赖关系 2、支持并发 即生产者和消费者是两个可以独立的并发主体,互不干扰的运行,如果没有中间的环节,则会生产者阻塞或者消费者阻塞。不管是哪种方法效率都比较低。 3、支持盲闲不均 如果生产数据的速度时快时慢,缓冲区可以对其进行适当缓冲。当生产的数据太块时,消费者来不及处理,未处理的数据可以暂时存在缓冲区。等生产者的生产速度慢下来,消费者再慢慢处理掉。 四、提升与思考 1、队列可以有多种实现: (1)先放先出:FIFO (2)后放先出:LIFO (3)优先级队列:Priority Queue 2、为什么生产和消费要用多线程 单线程太耗时,只有当多线程的效率提升可以抵消开发难度和性能消耗时才有必要用多线程; 3、别忘记sychronized和notifyAll() 否则其他线程一直等待,不会继续 4