Если вы знаете , что объект не изменится (например, неизменяемые объекты, такие как String или Integer) и, следовательно, избежали использования любой из конструкций синхронизации (synchronized
, volatile
),чтение этого объекта из нескольких потоков не влияет на производительность.Все потоки получат доступ к памяти, в которой объект хранится параллельно.
Однако JVM может выбрать локальное кэширование некоторых значений в каждом потоке по соображениям производительности.Использование volatile
запрещает только такое поведение - JVM будет вынужден явно и атомарно обращаться к полю volatile
каждый раз.