1
我有一個LinkedBlockingQueue
,以及一些對它進行操作的線程。關於LinkedBlockingQueue採取方法的說明
public void run(){
...
foo(linkedBlockingQueue.take());
...
}
public void foo(Object o){
synchronized(o){
//operate on the object
....
//after operate re-insert the object inside the queue
}
}
,如果我有這樣的情況:
一個阻塞隊列具有5種元素和「幸運」線程已經獲得的第一個元素,以便控制:
- 其他線程同時想要第一個元素將放入
wait
? - 如果第一句是正確的,那麼使用塊是沒有用的?
- 其他線程在拾取第一個元素時可以訪問間隔中的其他位置,並且在沒有
mutex exclusion
的情況下插入這個元素?
在此先感謝。
感謝您的回答,我現在明白了。take方法是原子的,自然而然,但並不阻止其他線程獲取其他元素 – 2014-10-19 15:59:34