Да, BlockingQueue
методы add()
и take()
являются потокобезопасными , но с разницей .
Метод
add ()
и take()
использует 2 различных объекта ReentrantLock
.
add(
) метод использует
private final ReentrantLock putLock = new ReentrantLock();
take()
метод использует
private final ReentrantLock takeLock = new ReentrantLock();
Следовательно, синхронный доступ к методу add()
синхронизирован. Аналогично, одновременный доступ к методу take()
равен synchronized
.
Но одновременный доступ к методам add()
и take()
не является synchronized
, поскольку они используют 2 различных объекта блокировки (кроме случаев, когда в граничном состоянии очереди полная / пустая).