单例模式

静态内部类 利用的是classloader机制




public class Singleton { 
    private Singleton(){
    }
      public static Singleton getInstance(){  
        return SingletonHolder.sInstance;  
    }  
    private static class SingletonHolder {  
        private static final Singleton sInstance = new Singleton();  
    }  
} 

volatile+双重检验锁 (禁止jvm指令重排序)

synchronized修饰的同步块可是要比一般的代码段慢

 

public class SingletonClass { 

  private volatile static SingletonClass instance = null; 

  public static SingletonClass getInstance() { 
    //当instance没有被实例化的时候,也就是需要去实例化的时候才去同步。
    if (instance == null) { 
      synchronized (SingletonClass.class) { 
         //再次校验 未实例化,进行新建实例
        if(instance == null) { 
          instance = new SingletonClass(); 
        } 
      } 
    } 
    return instance; 
  } 
  private SingletonClass() { 
  } 
}

分配内存空间  初始化对象  分配指针指向内存

你可能感兴趣的:(面试笔试)