Java多线程并发 生产者消费者模式

1  什么是生产者消费者模式

引用:https://www.jianshu.com/p/f53fb95b5820

      生产者和消费者模式是线程模型中的经典问题:生产者就是生产数据的线程,消费者就是消费数据的线程。生产者和消费者在同一时刻共享的有界缓冲区,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。为了使这个过程可以无休止的执行,不能因缓冲区满生产者放不进产品而终止,也不能因缓冲区空消费者无产品可取而终止,有很多方法......

实现生产者消费者模型的方法(缓冲区的具体方法):

(1)synchronized + wait() / notify()方法 
(2)ReentrantLock + await() / signal()方法 (线程锁)
(3)BlockingQueue阻塞队列方法 

引用:https://blog.csdn.net/fct2001140269/article/details/82940899

1  wait() 当缓冲区已满时生产者线程等待(这个线程停止),为空时消费者线程等待 ,放弃锁,让其他线程执行。

    notify() 生产者/消费者向缓冲区放入/取出一个产品时,放弃锁,(实时)通知其他线程执行。

2  引入ReentrantLock后代替同步锁,配合await() / signal()代替wait() / notify(),控制多线程更优

Java中的ReentrantLock和synchronized两种锁定机制的对比

引用 https://blog.csdn.net/fw0124/article/details/6672522

3   BlockingQueue阻塞队列

已在内部实现了ReentrantLock同步。它可以在生成对象时指定容量大小。它用于阻塞操作的是put()和take()方法:
put()方法:在生产者线程,容量达到最大时,自动阻塞。
take()方法:在消费者线程,容量为0时,自动阻塞。

猜你喜欢

转载自blog.csdn.net/sinat_41144773/article/details/88773831
今日推荐