`
crazy木木木
  • 浏览: 50695 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ConcurrentLinkedQueue应该注意的地方

    博客分类:
  • java
阅读更多

刚开始认为使用了ConcurrentLinkedQueue类之后意味着不需要自己进行任何同步或加锁操作,查了下资料,
如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。
但如果是非原子操作,比如:
    if(!queue.isEmpty()) { 
    queue.poll(obj); 
   } 
我们很难保证,在调用了isEmpty()之后,poll()之前,这个queue没有被其他线程修改。
所以对于这种情况,我们还是需要自己同步:
  synchronized(queue) { 
     if(!queue.isEmpty()) { 
         queue.poll(obj); 
      } 
   } 

当然,如果是可以接受的脏读同样可以不用加synchronized

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics