Мой вопрос о предложении в документе:«scanAndLockForPut» в ConcurrentHashMap JDK1.7
В отличие от большинства методов, вызов метода равных не экранированы: Поскольку скорость обхода не имеет значения, мы могли бы а также поможет разогреть связанный код и получить доступ.
Я не могу понять приведенное выше предложение. В частности, что означает «не экранированный» означает? И почему мы можем «разогреть связанный код»?
scanAndLockForPut
private HashEntry<K,V> scanAndLockForPut(K key, int hash, V value) {
HashEntry<K,V> first = entryForHash(this, hash);
HashEntry<K,V> e = first;
HashEntry<K,V> node = null;
int retries = -1; // negative while locating node
while (!tryLock()) {
HashEntry<K,V> f; // to recheck first below
if (retries < 0) {
if (e == null) {
if (node == null) // speculatively create node
node = new HashEntry<K,V>(hash, key, value, null);
retries = 0;
}
else if (key.equals(e.key))
retries = 0;
else
e = e.next;
}
else if (++retries > MAX_SCAN_RETRIES) {
lock();
break;
}
else if ((retries & 1) == 0 &&
(f = entryForHash(this, hash)) != first) {
e = first = f; // re-traverse if entry changed
retries = -1;
}
}
return node;
Я думаю, что, поскольку время ожидания блокировки короткое, оно пытается разогревать кеши, ожидая вместо блокировки и, возможно, возникающий контекстный переключатель. –