пользователям назначена роль sql azure

Сразу после того, как код приобрел монитор объекта, ссылка на объект хранится в 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.

14
задан Igor Borisenko 17 April 2014 в 02:04
поделиться