在代码获取对象的监视器之后,立即将对对象的引用存储到中
tab,该对象是组成节点的全局可见节点数组,这些节点组成了以下内容
ConcurrentHashMap:
Node<K,V> r = new ReservationNode<K,V>();synchronized (r) { if (casTabAt(tab, i, null, r)) {此时,在同一线程上执行其他修改方法的其他线程
ConcurrentHashMap在遍历全局数组时可能会遇到此不完整的节点,换句话说,
Node引用已转义。
虽然在
ReservationNode构造时就不可能对新创建的对象
Node进行争用,但是在与数组中找到的s
同步的其他方法中,可能确实存在争用
Node。
这就像“优先级同步”。创建者正在同步一个尚未转义引用的点,因此可以保证成功,而在该引用转义的点,所有其他线程都必须等待,如果它们访问的可能性很小(但仍然可能),恰好那样
Node。



