据我所知,AtomicReferenceArray类允许以原子方式更新各个元素。这将使集合线程安全。并发集合使用各种算法来允许集合是线程安全的,但也是非阻塞的。我知道一些集合类提供了方便的方法,如add(...)
,或某些功能,如排队。但忽略这一点,并专注于添加和检索元素,是否有理由使用其中一个并发集合而不是AtomicReferenceArray?
另外,性能怎么样?
答案 0 :(得分:11)
是否有理由使用其中一个并发集合而不是AtomicReferenceArray?
是的,如果您需要动态大小的集合。 AtomicReferenceArray
允许您以原子方式获取和设置数组中的元素,但不能增加数组的大小。
两个线程可以使用AtomicReferenceArray
和其他方法可靠地更改compareAndSet(...)
中的相同元素,但它们不能像您一样将数据添加到数组中采集。例如,如果每个线程都具有唯一ID并且他们正在更新数组中的个人值,则使用AtomicReferenceArray
非常有用。但是,如果您有两个生产者想要将作业添加到工作清单中,这将无效。
最后,AtomicReferenceArray
的复杂性远远低于真正的并发集合。并发集合允许迭代器,删除,添加等同时安全地发生。 AtomicReferenceArray
类允许测试和设置旋转循环和其他功能,但不能完全替代完整的集合。
答案 1 :(得分:0)
并发非阻塞收集算法在多核计算机上的性能将超过阻塞算法的数量级。这是偏好并发算法的最重要原因。
查看LMAX架构,了解有关非阻塞算法的显着性能增益的更多信息。
答案 2 :(得分:-1)
并发集合和AtomicReferenceArrays几乎没有共同之处。不确定你想如何比较它们。它们有不同的用途和属性。