当前位置:  开发笔记 > 编程语言 > 正文

java集合的不可修改的包装器是否使它们对线程安全?

如何解决《java集合的不可修改的包装器是否使它们对线程安全?》经验,为你挑选了2个好方法。

我需要使ArrayLists的ArrayList线程安全.我也无法让客户对集合进行更改.不可修改的包装器是否会使其线程安全,或者我需要在集合上使用两个包装器?



1> Michael Borg..:

这取决于.包装器只会阻止对它包装的集合的更改,而不是对集合中的对象的更改.如果您有ArrayList的ArrayList,则需要单独包装全局List及其每个元素列表,并且您可能还必须对这些列表的内容执行某些操作.最后,您必须确保原始列表对象不会更改,因为包装器仅阻止通过包装器引用而不是原始对象进行更改.

在这种情况下,您不需要同步包装器.



2> Dror Helper..:

在一个相关的主题 - 我已经看到几个回复建议使用同步收集,以实现线程安全.使用集合的同步版本并不会使其"线程安全" - 尽管每个操作(插入,计数等)在组合两个操作时都受到互斥锁的保护,但不能保证它们会以原子方式执行.例如,以下代码不是线程安全的(即使使用同步队列):

if(queue.Count > 0)
{
   queue.Add(...);
}

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有