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个不同的锁定对象(除了在队列满/空的边缘条件期间).