前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一面 - java中LinkedTransferQueue和SynchronousQueue有什么区别?

每日一面 - java中LinkedTransferQueue和SynchronousQueue有什么区别?

作者头像
干货满满张哈希
发布2021-04-12 13:46:52
8230
发布2021-04-12 13:46:52
举报

LinkedTransferQueue 是一种 TransferQueue,SynchronousQueue 是一种 BlockingQueue。

TransferQueue和BlockingQueue

BlockingQueue 是一种阻塞队列,队列是有大小的。队列满的时候,生产者会阻塞。队列空的时候,消费者会阻塞。

TransferQueue在BlockingQueue提供的方法基础上,增加了 transfer 方法,就是只有生产者的消息被消费之后,才返回,否则继续阻塞。

SynchronousQueue VS LinkedTransferQueue

SynchronousQueue 是一个队列长度为 0 的 BlockingQueue,这样只要上一个入队列的生产者的消息没被消费,之后的生产者就必须等待。如果要保证生产者先后顺序,则需要设置为公平模式。

LinkedTransferQueue 是一种效率更高的公平队列,主要是:

通过 CAS 更新引用,避免使用锁 数据缓存行填充减少false sharing 优化双向同步队列数据结构,减少更新冲突 具体实现,可以参考 Doug Lea 大爷的论文

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TransferQueue和BlockingQueue
  • SynchronousQueue VS LinkedTransferQueue
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档