1,饿汉式:在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。
2,懒汉式:当程序第一次访问单件模式实例时才进行创建。
如何选择:如果单件模式实例在系统中经常会被用到,饿汉式是一个不错的选择。
反之如果单件模式在系统中会很少用到或者几乎不会用到,那么懒汉式是一个不错的选择。
饿汉式 类加载的时候就会初始化 线程安全
public class Single1 {
private static final Single1 single = new Single1();
private Single1(){}
public static Single1 getSingle1(){
return single;
}
}
懒汉式 线程并发的时候,线程不安全
public class Single2 {
private static Single2 single;
private Single2(){}
public static Single2 getSingle2(){
if(single==null){
single = new Single2();
}
return single;
}
}
public class Single2 {
//懒汉式双检锁
private static Single2 single2;
private Single2(){}
public static synchronized Single2 getsinSingle2(){
if(single2==null){
synchronized(Single2.class){
if(single2==null){
single2 = new Single2();
}
}
}
return single2;
}