据我了解,AtomicReferenceArray类允许以原子方式更新各个元素。这将使集合线程安全。并发集合采用各种算法来允许集合是线程安全的,但也是非阻塞的。我了解某些集合类提供了方便的方法,例如add(...)
,或某些功能,例如排队。但是忽略这一点,只关注添加和检索元素,是否有理由使用其中一个并发集合而不是 AtomicReferenceArray?
另外,性能怎么样?
据我了解,AtomicReferenceArray类允许以原子方式更新各个元素。这将使集合线程安全。并发集合采用各种算法来允许集合是线程安全的,但也是非阻塞的。我了解某些集合类提供了方便的方法,例如add(...)
,或某些功能,例如排队。但是忽略这一点,只关注添加和检索元素,是否有理由使用其中一个并发集合而不是 AtomicReferenceArray?
另外,性能怎么样?
是否有理由使用其中一个并发集合而不是 AtomicReferenceArray?
是的,如果您需要动态大小的集合。允许您以原子方式获取和设置数组中的AtomicReferenceArray
元素,但不能增加数组的大小。
两个线程可以AtomicReferenceArray
在with和其他方法中可靠地更改相同的元素compareAndSet(...)
,但它们不能像集合一样向数组添加数据。例如,如果每个线程都有一个唯一的 ID,并且它们正在更新数组中的个人值,则使用 anAtomicReferenceArray
很有用。但是,如果您有两个制作人想要将工作添加到工作列表中,这将不起作用。
最后,它的复杂性AtomicReferenceArray
远低于真正的并发集合。并发集合允许迭代器、删除、添加等安全地同时发生。该类AtomicReferenceArray
允许测试和设置自旋循环和其他功能,但不能很好地替代完整的集合。
并发非阻塞收集算法在多核机器上的性能将优于阻塞算法几个数量级。这是更喜欢并发算法的最重要原因。
查看LMAX架构,了解更多关于非阻塞算法显着性能提升的信息。
并发集合和 AtomicReferenceArrays 几乎没有共同之处。不知道你想如何比较它们。它们有不同的用途和特性。