首先我觉得 LinkedTransferQueue 相比其他普通的无界队列,只是多了一个 可以阻塞的入队操作。其他没什么不同,都是符合 FIFO 的。
LinkedTransferQueue 的实现也看了,大概就是 CAS + volatile + LockSupport.
不过我觉得,LinkedTransferQueue 也可以使用一个Lock
+两个Condition
来实现,一个用来阻塞生产者线程,一个用来阻塞消费者线程,通过hasWaiters
判断是否有没有取消掉的节点,通过getWaitingThreads
获得第一个等待的线程。
虽然我上面这种想法是悲观锁了,或者 LinkedTransferQueue 就是想用乐观锁实现吗? LinkedTransferQueue 为什么不用 Condition 实现?