据我了解,AtomicReferenceArray类允许以原子方式更新单个元素。这将使集合线程安全。并发集合使用各种算法来使集合是线程安全的,但也是非阻塞的。我知道一些集合类提供方便的方法,如 add(...)
,或某些功能如排队。但是忽略这一点,只关注添加和检索元素,是否有理由使用并发集合之一而不是 AtomicReferenceArray?
另外,性能怎么样?
最佳答案
is there a reason to use one of the concurrent collections rather than an AtomicReferenceArray?
是的,如果您需要一个动态大小的集合。 AtomicReferenceArray
允许您以原子方式获取和设置数组中的元素,但您不能增加数组的大小。
两个线程可以使用compareAndSet(...)
和其他方法可靠地更改AtomicReferenceArray
中的相同元素,但它们不能不要像添加集合那样将数据添加到数组中。使用 AtomicReferenceArray
很有用,例如,如果每个线程都有一个唯一的 ID 并且它们正在更新数组中的个人值。但是,如果您有两个想要将工作添加到工作列表的生产者,这将不起作用。
最后,AtomicReferenceArray
的复杂性远低于真正的并发集合。并发集合允许迭代器、删除、添加等同时、安全地发生。 AtomicReferenceArray
类允许测试和设置自旋循环和其他功能,但不能很好地替代完整的集合。
关于java - 当有 AtomicReferenceArray 时,并发列表和集合有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465709/