woo*_*ngs 1 java synchronization thread-safety
我有多个线程从一个标记为 final 的共享数组访问元素(我永远不会尝试为它分配另一个数组)。我需要同步任何东西吗?我可以假设对元素的读/写是原子的吗?
除非数组是 long 或 double 类型,否则写入是原子的。但是, atomic 属性对您没有帮助,因为不能保证写入对其他线程可见。
如果数组是引用类型,问题会更严重,因为其他线程可能会看到您的对象被撕裂:有些字段可见,有些字段不可见。
要安全地共享元素的随机访问集合,您需要synchronizedList在普通ArrayList或无锁周围包装CopyOnWriteArrayList。
如果您对数组的固定大小没问题(看起来是这样),那么还要考虑一下,AtomicReferenceArray因为它允许原子比较和设置和获取和设置操作,这可能会让您更进一步地实现什么你需要而不需要锁。
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |