Что есть 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.
Комментариев нет:
Отправить комментарий