失效链接处理 |
SynchronousQueue实现原理 PDF 下载
本站整理下载:
相关截图:
![]()
主要内容:
SynchronousQueue是一个比较特别的队列,由于在线程池方面有所应用,为了更好的
理解线程池的实现原理,笔者花了些时间学习了一下该队列源码(JDK1.8),此队列源
码中充斥着大量的CAS语句,理解起来是有些难度的,为了方便日后回顾,本篇文章
会以简洁的图形化方式展示该队列底层的实现原理。
# SynchronousQueue简单使用
经典的生产者-消费者模式,操作流程是这样的:
有多个生产者,可以并发生产产品,把产品置入队列中,如果队列满了,生产者就会
阻塞;
有多个消费者,并发从队列中获取产品,如果队列空了,消费者就会阻塞;
如下面的示意图所示:
SynchronousQueue
也是一个队列来的,但它的特别之处在于它内部没有容器,一个生产线程,当它生产
产品(即put的时候),如果当前没有人想要消费产品(即当前没有线程执行take),此
生产线程必须阻塞,等待一个消费线程调用take操作,take操作将会唤醒该生产线
程,同时消费线程会获取生产线程的产品(即数据传递),这样的一个过程称为一次
配对过程(当然也可以先take后put,原理是一样的)。
我们用一个简单的代码来验证一下,如下所示:
|