问题描述
我知道ConcurrentHashMap是thread-safe.如果map是一个ConcurrentHashMap我的问题是:map.put(a,newB());上面语句,如果b的构造函数需要引用map的内容,请问上面的内容还是thread-safe吗?也就是说,假设构造B需要一定的时间,在构造完B后,map的内容会不会改变?
解决方案
本帖最后由 kolapig 于 2010-11-24 08:16:15 编辑
解决方案二:
让map不变是不可能的。但他的变化,绝对不是无意义。线程安全与否,要看你的原子操作(可以是一组)的语义。你现在的这几行代码,map是可能变化的,但map的状态,在各线程中是一致的。也就是说,同步,有时候是为了,防止并发修改;有时候也时为了保证他在其他线程的可见性(一个线程写,多个线程读)。
时间: 2024-10-02 17:04:18