简述Java内存模型的由来、概念及语义(2)

对象只有在完全初始化后,其final变量对其它线程才是可见的。这说明,final变量的初始化可以在不使用synchronization的情况下实现线程安全。这样,final变量实现了真正意义上的final(即,不-可-变),而不会在初始化过程中、后在多线程中看起来会改变。

 

class A { final Map<String,String> map=null; public void A() { map = new HashMap<String,String>(); map.put("key1","value1"); } }

其他线程在引用A的对象之前,JMM保证A的final变量已经被其构造函数完全初始化。也就是说,final变量的完全初始化 happends-before 其他线程对该对象的引用。即,final变量在构造函数中的初始化是线程安全的。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b264a8b31cfff675c6f46e8a8b69131d.html