首先抛出一个问题:
LinkedBlockingQueue首尾2把锁是如何保证并发安全的?
背景
我们知道,要保证共享变量的多线程并发读写安全需要用同一把锁。但是LinkedBlockingQueue
有putLock和takeLock2把锁,是如何保证并发安全的呢?
先来看下LinkedBlockingQueue源码上的注释:
A variant of the “two lock queue” algorithm
“two lock queue” algorithm的一个变种。那什么是”two lock queue” algorithm呢?