u 多线程-单例设计模式
一般使用饿汉式,但面试总考懒汉式!!!
1.饿汉式
class Single{ private static final Single s = new Single(); private Single(){} public static Single getInstance(){ return s; } } |
2.懒汉式
特点在于延迟加载,多线程访问会出现安全问题,可以加同步来解决,但是效率会低,用双重判断的形式能解决效率问题,加同步的时候使用的锁是:该类所属的字节码类对象
class Single{ private static Single s = null;//此处不能加final修饰,否则s终身为空,无法赋值改变 private Single(){} //延迟加载 public static synchronized Single getInstance(){ //懒汉式加同步效率低 if(s==null) s = new Single(); return s; } } |
可通过双层判断减少同步的判断,提高懒汉式效率
如下:
*** 重点!!!延迟加载的单例设计模式示例
class Single{ private static Single s = null; private Single(){} public static Single getInstance(){ if(s==null){ synchronized(Single.class){//static方法中不能使用this if(s==null) s = new Single(); } } return s; } } |