多线程-单例设计模式

一般使用饿汉式,但面试总考懒汉式!!!

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;

}

}