Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, korostoff, Вы писали:
K>>Да, если переменная не volatile или если между запись в одном потоке/чтение в другом не было memory barrier (т.е. если после записи не освобожден монитор, а перед чтением не получен ТОТЖЕ монитор).
А>Тут я вас не понял. Почему именно "тотже" монитор? Поясните пожалуйста
Я пытался
. Видимо лучше меня это объяснено в JSR133 FAQ: What does synchronization do?
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#synchronization
А>Вот здесь тоже есть разногласия в понимании JLS . Вы пишите "ВСЕ иземененные переменные", а есть мнение, что только те, к которым относиться замок. Иными словами, освобождения замка объекта приводит к записи данных объекта в общую память. А если процесс менял данные других объектов?
Цитата из JLS 2.0 "17.6 Rules about the Interaction of Locks and Variables"
...if a thread is to perform an unlock action on any lock, it must first copy all assigned values in its working memory back out to main memory.
...
a lock action acts as if it flushes all variables from the thread's working memory; before use they must be assigned or loaded from main memory.
А>Вот этого я совсем не понял. Можете пояснить?
См. JSR133 FAQ и Fixing the Java Memory Model
http://www-128.ibm.com/developerworks/library/j-jtp03304/
Здравствуйте, korostoff, Вы писали:
K>Я пытался . Видимо лучше меня это объяснено в JSR133 FAQ: What does synchronization do? http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#synchronization
Понял.
K>Цитата из JLS 2.0 "17.6 Rules about the Interaction of Locks and Variables"
Согласен.
K>См. JSR133 FAQ и Fixing the Java Memory Model http://www-128.ibm.com/developerworks/library/j-jtp03304/
Перечитал JMM в JLS3. Разобрался.
Спасибо.