2014-09-20 3 views

ответ

2

Для координации доступа к общим данным между несколькими потоками виртуальная машина Java связывает блокировку с каждым объектом и классом. Блокировка подобна привилегии, что только один поток может «обладать» в любой момент времени. Если поток хочет заблокировать определенный объект или класс, он запрашивает JVM. В какой-то момент после того, как поток запрашивает JVM для блокировки - возможно, очень скоро, может быть, позже, возможно, никогда - JVM не дает блокировку потоку. Когда поток больше не нуждается в блокировке, он возвращает его в JVM. Если другой поток запросил одну и ту же блокировку, JVM передает блокировку этому потоку.

Заканчивать всю статью для получения дополнительной информации: http://www.javaworld.com/article/2076971/java-concurrency/how-the-java-virtual-machine-performs-thread-synchronization.html

3

Broad вопрос:

Как виртуальная машина убедитесь, что ...?

«VM» в «JVM» означает «виртуальная машина». Ваш код ничего не делает сам по себе. Когда мы говорим, что «ваш код работает», мы действительно имеем в виду, что JVM выполняет вашими инструкциями. И это делается в соответствии с правилами, изложенными в спецификации JVM. Одно из правил гласит, что JVM никогда не должен выполнять синхронизированный блок для двух разных потоков на одном и том же объекте одновременно.

Но есть много слоев к луке: A typeical JVM использует собственные потоки (то есть потоки, предоставляемые операционной системой) для выполнения Java-потоков, и это, как правило, опирается на объекты мьютекса, предоставляемые операционной системой для синхронизации потоки.

Идет еще глубже, ни JVM, ни операционная система действительно ничего не делают сами по себе: это компьютерное оборудование , выполняющее инструкции ОС и JVM, которые действительно заставляют вещи произойти.

Полный ответ на вопрос «как работает синхронизация?». представляет собой пару глав из книги о дизайне операционной системы, а также пару глав из книги по компьютерной архитектуре, а также компьютерную науку сбоку. Чтобы полностью понять все это, вы по крайней мере будете знать о:

    «инструкции пользовательского режима»
  • vs. «льготной инструкции режима»,
  • Как система вызывает работу,
  • Как в операционную системный «планировщик» выполняет «Контекстные коммутаторы»
  • примитивы синхронизации оборудования, такие как «Сравнение и замена (CAS)», «Test and Set (TAS)», «load-link/store-conditional (LL/SC)»

Все они являются предметами, которые вы можете найти в Wik ipedia, но ИМО, книги лучше изучают предмет этой глубины.

Смежные вопросы