聂永的博客

记录工作/学习的点点滴滴。

Fork/Join模式(JSR166y)手记之ConcurrentLinkedDeque

ConcurrentLinkedDeque是JSR166y中新增的一个无界并发Deque实现,基于已链接节点的、任选范围的双端队列。在迭代时,队列保持弱一致性,但不会抛出ConcurrentModificationException异常。
需要小心,与大多数 collection 不同,size 方法不是一个固定时间操作。由于这些队列的异步特性,确定当前元素的数量需要遍历这些元素。
另外,一些批量操作,诸如 addAll, removeAll, retainAll, containsAll, equals, toArray等,不能够保证会立刻执行。比如通过addAll方法批量提交若干元素,于此同时另一线程在迭代时,可能只能访问到先前存在的元素。
内存一致性效果:当存在其他并发 collection 时,将对象放入 ConcurrentLinkedDeque 之前的线程中的操作 happen-before 随后通过另一线程从 ConcurrentLinkedDeque 访问或移除该元素的操作。
先前存在一个线程安全并阻塞的LinkedBlockingDeque实现,现在好了,又多了个并发实现,这样和Queue保持一致,并发和阻塞版本都具有了。嗯,果然是好事要成双。
在使用上没有什么可说的,随时查看API DOC,即可。刚开始以为Fork/Join的工作窃取(work stealing)机制内部使用ConcurrentLinkedDeque实现,查看ForkJoinPool源代码时,不曾发现其身影。




参考资料:
  1. Class ConcurrentLinkedDeque

posted on 2012-02-06 20:39 nieyong 阅读(1233) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航:
 

公告

所有文章皆为原创,若转载请标明出处,谢谢~

新浪微博,欢迎关注:

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

统计

常用链接

留言簿(58)

随笔分类(130)

随笔档案(151)

个人收藏

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜