- 可以根据需要通过Java内存模型的一些解释一个初始化安全 ?
- 如何最终场在实现初始化安全帮助吗?
- 什么样的角色在保证安全初始化 构造玩?
Answer 1:
初始化安全提供了一种用于一个目的是通过在其完全构造(初始化)状态的外螺纹可以看出。 前提是该对象不应过早即公布。 在其构造。 一旦这个保证,JMM需要被声明为字段中的某些行为final
。 首先,所有的final
目标字段保证的广告要由外螺纹在其完全初始化状态可见-这是不是像听起来那么微不足道-
考虑一类
class A{
List list ;
A() {
list = Arrays.asList(some init expressions that adds 10 elements to list);
}
}
访问该线程list
的A
的情况下是默认情况下不保证看到该列表中的10个元素。 事实上,这个线程甚至可以看到list
为null
。 但是,如果list
声明final
,那么,所要求的JMM,该list
必须始终出现有10个元素是它被初始化。
其次,这个初始化担保不限于final
领域本身,而是递归扩展到由它提到的所有对象。 例如,如果list
在上面的例子是列表list
š本身,则外螺纹保证看到内部列表作为完全初始化。
需要注意的是无处被我们使用synchronized
实现在内存中的知名度此安全(之前发生关系)。
Answer 2:
1.初始化安全允许正确建造以跨线程安全地共享,而无需使用同步不变的对象 ,不管即使他们使用数据种族出版的。
2.具有最终字段对象,初始化安全防止重新排序结构的任何部分与该对象的引用的初始加载。
文章来源: Please explain initialization safety as spelled out in Java memory model