码上敲享录 > java高并发常见问题 > 队列LinkedTransferQueue和SynchronousQueue区别

队列LinkedTransferQueue和SynchronousQueue区别

上一章章节目录下一章 2019-05-30已有3078人阅读 评论(0)

队列LinkedTransferQueue和SynchronousQueue区别


解决方法:

SynchronousQueue一般来说如果线程a通过put方法存入数据到队列中,如果没有别的线程通过take方法去获取这个数据,那线程a进入阻塞状态;当有别的线程获取了这个值之后,线程a就恢复执行。

如果线程b获取这个队列的数据时队列是空的,那线程b进入阻塞状态。直到有线程往这个队列里添加数据。



队列LinkedTransferQueue和SynchronousQueue有些类似,但LinkedTransferQueue可以使用put、tryTransfer、transfer添加多个数据而不用等别的线程来获取。tryTransfer和transfer与put不同的是,tryTransfer和transfer可以检测是否有线程在等待获取数据,如果检测到就立即发送新增的数据给这个线程获取而不用放入队列。所以当使用tryTransfer和transfer往LinkedTransferQueue添加多个数据的时候,添加一个数据后,会先唤醒等待的获取数据的线程,再继续添加数据。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交