LinkedTransferQueue 为什么不用 Condition 实现

2020-08-09 00:47:56 +08:00
 amiwrong123

首先我觉得 LinkedTransferQueue 相比其他普通的无界队列,只是多了一个 可以阻塞的入队操作。其他没什么不同,都是符合 FIFO 的。

LinkedTransferQueue 的实现也看了,大概就是 CAS + volatile + LockSupport. 不过我觉得,LinkedTransferQueue 也可以使用一个Lock+两个Condition来实现,一个用来阻塞生产者线程,一个用来阻塞消费者线程,通过hasWaiters判断是否有没有取消掉的节点,通过getWaitingThreads获得第一个等待的线程。

虽然我上面这种想法是悲观锁了,或者 LinkedTransferQueue 就是想用乐观锁实现吗? LinkedTransferQueue 为什么不用 Condition 实现?

1326 次点击
所在节点    Java
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696787

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX