源码里的volatile难道不是为了防止new HashMap可能会发生指令重排序现象吗?
来源:1-12 哨兵核心源码主流程分析-2
techa
2020-08-02 16:33:20
private static volatile Map<ResourceWrapper, ProcessorSlotChain> chainMap
= new HashMap<ResourceWrapper, ProcessorSlotChain>();
// 源码
synchronized (LOCK) {
chain = chainMap.get(resourceWrapper);
if (chain == null) {
// Entry size limit.
if (chainMap.size() >= Constants.MAX_SLOT_CHAIN_SIZE) {
return null;
}
chain = SlotChainProvider.newSlotChain();
Map<ResourceWrapper, ProcessorSlotChain> newMap = new HashMap<ResourceWrapper, ProcessorSlotChain>(
chainMap.size() + 1);
newMap.putAll(chainMap);
newMap.put(resourceWrapper, chain);
chainMap = newMap;
}
}
2回答
阿神
2020-08-02
说错了map size的 可见性
阿神
2020-08-02
是为了保证 hashmap的 size原子性
相似问题