首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

ConcurrentLinkedQueue应当注意的地方

2012-09-10 
ConcurrentLinkedQueue应该注意的地方刚开始认为使用了ConcurrentLinkedQueue类之后意味着不需要自己进行

ConcurrentLinkedQueue应该注意的地方

刚开始认为使用了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

热点排行