Все примеры, которые я нашел, которые говорят о видимости, являются примерами с примитивным типом. То, что я хочу знать: если объект, который новый в куче, когда один поток вызывает свой метод, чтобы изменить свое состояние, без блокировки или синхронизации, другой поток увидит это изменение?
Представьте себе объект Java.Colletion, один поток вызывает его метод add ()
Кто-то говорит, что для объекта в куче все еще есть проблема видимости, но JLS сказал:
17.4.1 Общие переменные
Память, которая может быть разделена между потоками, называется общей памятью или кучей.
и
http://www.artima.com/insidejvm/ed2/jvm2.html сказал:
Стек Java потока хранит состояние вызовов метода Java (не собственного) для потока. Состояние вызова метода Java включает его локальные переменные, параметры, с которыми он был вызван, его возвращаемое значение (если оно есть) и промежуточные вычисления.
Так что я думаю, JVM не будет копировать объект, который в куче, в кеш процессора. Если это правильно, объект в куче не будет иметь проблемы с видимостью, потому что поток просто ссылается на объект в куче.
КСТАТИ
Предположим, что есть параллельная проблема, когда один поток вызывает .add (). В обычном процессе изменения должны быть защищены с помощью блокировки, поэтому эта проблема не является проблемой. Но я просто хочу знать:)