среда, 27 августа 2008 г.

Java memory model in 500 words

Оригинальная статья

Что есть Java Memory Model? JMM объяснаяет почему дважды проверенный лдокинг не работает и как это исправить.

JMM отвечает на простой, казалось бы, вопрос: в какой момент можно будет прочесть значение 3 переменной myVariable после присвоения этого значения.

Правила такие:

  • Правило упорядочивания программы. В пределах программы действия происходят в запрограммированном порядке.
  • Monitor lock rule. Unlock on monitor происходит до следующего лока.
  • Volatile variable rule. A write to a volatile happens-before every subsequent read of that volatile.
  • Thread start rule. Thread.start happens-before actions in the Thread
  • Thread termination rule. Actions in a thread happens-before other threads detect the thread's termination.
  • Interruption rule. A thread calling interrupt on another thread happens before the interrupted thread detects the interrupt.
  • Finalizer rule. End of object construction happens-before start of object finalization.
  • Transitivity. If A happens-before B, and B happens-before C, then A happens-before C.

There you have it, the Java Memory Model in 500 words. This summary has been taken from Brian Goetz's Java Concurrency in Practice, which I can't recommend enough.

Комментариев нет: