【发布时间】:2015-11-18 06:23:51
【问题描述】:
我正在阅读 J. Bloch 的有效 Java,现在我正在阅读关于延迟初始化的部分。考虑以下类:
public class LazyInit{
public static getObject(){ //Not synchronized
return Holder.o;
}
private static Object createObject(){
System.out.println("Creating started");
return new Object();
}
private static class Holder{
private static Object o = createObject();
}
}
J。布洛赫谈到了这个成语:
这个成语的美妙之处在于getField方法不是 同步并且只执行一个字段访问,所以很懒 初始化几乎不会增加访问成本。
我不明白为什么它可以安全通过。如果在字段初始化期间另一个线程尝试同时访问该字段怎么办?该对象在线程需要它时并未创建。那么,会发生什么?
【问题讨论】:
标签: java multithreading lazy-initialization