Ste*_*Kuo 52 java concurrency multithreading synchronization
我LinkedBlockingQueue
在两个不同的线程之间使用.一个线程通过添加数据add
,而另一个线程通过take
.
我的问题是,我是否需要同步访问add
和take
.是LinkedBlockingQueue
的插入和删除方法是线程安全的?
Amr*_*dey 12
是的,BlockingQueue
方法add()
和take()
线程安全,但有区别.
add ()
和take()
方法使用2个不同的ReentrantLock
对象.
add(
)方法用途
private final ReentrantLock putLock = new ReentrantLock();
Run Code Online (Sandbox Code Playgroud)
take()
方法用途
private final ReentrantLock takeLock = new ReentrantLock();
Run Code Online (Sandbox Code Playgroud)
因此,同步访问add()
方法是同步的.同样,同时访问take()
方法是synchronized
.
但是,同时访问add()
和take()
方法不是synchronized
因为它们使用2个不同的锁定对象(除了在队列满/空的边缘条件期间).