Hayır alarak sağlamak için en kolay yoldur değişkenin yükleme sırasında herhangi bir başka iş parçacığı tarafından tutulan değildir temin etmelidir bile. Derleyici ve JVM bunu yapsaydı, Java programlama dili bellek modeli tarafından belirlenen kısıtlamaların ihlal edilmiş olması muhtemeldir. Daha fazla özellikle, Java Dil Özellikleri'nde belirtilen synchronization order siparişi ihlal edilir. Bir derleyici veya bir JVM * herhangi bir "istenmeyen" eşitlemeyi kaldırsaydı, daha sonra yapılan herhangi bir ek optimizasyon, bir geliştirici tarafından senkronizasyon sırasına (ve önce-önce) ilişkisine yerleştirilen varsayımları ihlal eder. Özel durumunuzda, tamsayıya yazma işlemi, Java bellek modeline uyan bir derleyici/JVM'de okunmadan önce olur.
Senkronizasyonları kaldıran bir derleyici/JVM, bellek modelinin ihlal edildiği bir ortamla sonuçlanabilir. Örneğin, astar içi yöntem, tamsayı değerinin okunmasından önce bir bellek bariyerini yerleştiren derleyici/JVM olmadan gerçekleştirilebilir, böylece eski değerlerin önbelleğe alınmış bir değerden okunmasına izin verilir.
* Not: Derleyici/JVM duo referansı kasıtlıdır. Bir derleyici yalnızca JLS ile uyumlu olan bayt kodu gönderir; Bir JVM, bellek modelinin gereksinimlerinin hala ihlal edilebileceği bir hatayı alabilir. Bellek modelinin bütünlüğü için, hem derleyici hem de JVM, bellek modeli tarafından belirlenen gereksinimlere uygun olmalıdır.
Şüpheli. Eğer siz (programcı) bunu gereksiz olarak tanımanızda neden kodda belirtin? – Hyperbole
Yapmayacağım, ama 3. taraf koduna ya da kendime yazmadığım kodlara bağlı olduğumu varsayalım. – JVerstry