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