путают видимость переменной потока Java

Все примеры, которые я нашел, в которых говорится о видимости, относятся к примитивным типам. Что я хочу знать: если объект, который появился в куче, когда один поток вызывает свой метод для изменения его состояния, без блокировки или синхронизации, другой поток увидит это изменение? Представьте себе объект Java.Colletion, один поток вызывает его метод add ()

Кто-то говорит, что для объекта в куче все еще есть проблема с видимостью, но JLS сказал: 17.4.1 Общие переменные Память, которая может совместно использоваться между потоками, называется общей памятью или памятью кучи.

и http://www.artima.com/insidejvm/ed2/jvm2.html сказал: Стек Java потока хранит состояние вызовов Java (не собственных) методов для потока. Состояние вызова метода Java включает его локальные переменные, параметры, с которыми он был вызван, его возвращаемое значение (если есть) и промежуточные вычисления.

Итак, я думаю, JVM не будет копировать объект, который находится в куче, в CPU кеш. Если это правильно, у объекта в куче не будет проблем с видимостью, потому что поток просто ссылается на объект в куче.

BTW Предположим, существует параллельная проблема, когда один поток вызывает .add (). В нормальном процессе изменение должно быть защищено блокировкой, поэтому проблема не возникает. Но я просто хочу знать:)

5
задан jean 19 July 2011 в 03:57
поделиться