use*_*356 6 java multithreading
说我有一个数组[a,b,c,d]
线程A想要向集合中添加新元素e.CopyOnWriteArrayList创建新数组,复制旧数组中的所有值,添加新元素e,然后使用元素e更新对新数组的引用.
线程A复制值时,线程B也想添加新元素f.因此,它没有复制所有值Ë增加˚F,然后更新参考阵列.
在这种情况下,阵列中可能没有元素e.
如何在这里实现线程安全?
所有的修饰方法(add,set,remove,clear,等)被锁把守.这就是你如何正确的写入顺序.但是,由于写时复制,这意味着每个支持数组都是有效的不可变的,这意味着只读操作不需要锁定.(持有支持数组的字段是volatile,因此您仍然可以获得正确的事先发生行为.)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |