240 发简信
IP属地:安徽
  • 你好,我一开始也有跟你一样的疑问,确实扩容时每个线程处理的范围不会重叠,其实这个MOVED标志是给在扩容的同时准备put的其他线程用的。put的时候如果遇到MOVED,说明正在扩容并且当前的ENTRY已经被处理过了,所以put线程加入一起扩容。如果没有遇到MOVED,说明当前ENTRY没有被处理过,即使正在扩容也不管,直接锁住当前ENTRY,先put完再判断当前是否在扩容,是的话put线程也会加入一起扩容。所以1.8中扩容和PUT操作是可以并发执行的,Doug Lea大神真是把CAS玩的出神入化。

    深入分析ConcurrentHashMap1.8的扩容实现

    简书 占小狼 转载请注明原创出处,谢谢! 此谓知本,此谓知之至也 《礼记·大学》 1、深入浅出ConcurrentHashMap(1.8)2、谈谈ConcurrentHash...