concurrenthashmap

原理

  • segment继承ReentrantLock
  • remove方法,链表中待删除元素之后的元素原样保留在新链表中,待删除元素之前的元素翻转了顺序加入到新链表中
  • remove方法未改变原始链表,所以不影响读操作
  • segment中表示元素个数的count、hashentry中value字段都被标注为volatile,保证了内存可见性。
  • size方法,先尝试不加锁,计算两次,若两次计算都失败,即modCount在计算前后的值不相同,则进行加锁累加各segment中count大小。