java - 当有 AtomicReferenceArray 时,并发列表和集合有什么意义?

标签 java performance concurrency atomic

据我了解,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/

相关文章:

concurrency - 并行和并发编程

java - Java虚拟机上的数组分配和访问以及内存争用

java - spring-data-couchbase 中带有 Pageable 参数的 @Query

java - 线程时是否多次分配了java静态字段?

java - 在调用方法之前检查非空实际值时出现 NullPointerException

c++ - 虚拟方法会使应用程序变慢,但它们可以加快链接速度吗?

performance - CPU必须有累加器吗?

php - 人们应该何时或出于何种原因打开/关闭 PHP 安全模式?

java - 如何在整个应用程序中维护一个集中的对象

java - 保留对象的最新版本