怎么正确的使用java.util.ConcurrentLinkedQueue
1个回答
展开全部
如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。但如果是非原子操作,比如:
Java代码
if(!queue.isEmpty()) {
queue.poll(obj);
}
if(!queue.isEmpty()) {
queue.poll(obj);
}
我们很难保证,在调用了 isEmpty() 之后,poll() 之前,这个 queue 没有被其他线程修改。所以对于这种情况,我们还是需要自己同步:
Java代码
synchronized(queue) {
if(!queue.isEmpty()) {
queue.poll(obj);
}
}
来自:http://zhidao.baidu.com/link?url=BkdAK3TSkitPpz2pUSIFo6et-vM3ANND9cXymDzM0Ocr467FySaKm2nuUXGhXvTASYIhwGLHd67y_3xYViwkHeC7IQso6w3L8rSAF8Lgy8m
Java代码
if(!queue.isEmpty()) {
queue.poll(obj);
}
if(!queue.isEmpty()) {
queue.poll(obj);
}
我们很难保证,在调用了 isEmpty() 之后,poll() 之前,这个 queue 没有被其他线程修改。所以对于这种情况,我们还是需要自己同步:
Java代码
synchronized(queue) {
if(!queue.isEmpty()) {
queue.poll(obj);
}
}
来自:http://zhidao.baidu.com/link?url=BkdAK3TSkitPpz2pUSIFo6et-vM3ANND9cXymDzM0Ocr467FySaKm2nuUXGhXvTASYIhwGLHd67y_3xYViwkHeC7IQso6w3L8rSAF8Lgy8m
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询