
实例域 延迟初始化 可以采用 synchronize方法或者 双重校验锁来完成
类实例域 采用 lazy initialization holder class 模式
正常初始化 优先于 延迟初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
package book.effectiveJava;
public class {
private static class Holder{ private static final Target target= new Target(); public static Target getTarget(){ return target; } }
private static class Target{
public InnerTarget instance ;
private Target(){
}
public InnerTarget getTarget(){ if(instance==null){ synchronized (this){ if(instance==null){ instance=new InnerTarget(); } } } return instance; }
public synchronized InnerTarget getTarget2(){ if(instance==null){ instance=new InnerTarget(); } return instance; } private static class InnerTarget{
} }
public static void main(String[] args) { Object obj1 = Holder.getTarget().getTarget(); Object obj2 = Holder.getTarget().getTarget(); System.out.println(obj1==obj2); } }
|
近期评论