如果线程一将可变对象A放入并发集合中(例如ConcurrentSkipListMap),则我理解这是线程安全的,因为如果线程2从集合中获取对象A,则可以保证它是完全可见的。
但是,如果线程一在对象A处于集合中时对其进行了突变,那么由线程二获取它是否仍提供相同的完全可见性保证?
但是,如果线程一在对象A处于集合中时对其进行了突变,那么由线程二获取它是否仍提供相同的完全可见性保证?
不,绝对不是。并发保证仅适用于集合本身。从集合中获取元素后,它仅是常规的引用-因此,即使在“ get”操作的末尾存在内存障碍,也仍然可能出现以下情况:
Thread 1 Thread 2
get
get
mutate
read
...并且在完成这两项get
操作之后,收集就无关紧要了。
并发收集应用于:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句