1. 饿汉式:
1 class Single { 2 private Single(){}; 3 private static final Single s = new Single(); 4 5 public static Single getInstance(){ 6 return s; 7 } 8 }
2. 懒汉式:
1 class Single { 2 private Single(){}; 3 private static Single s = null;// 延迟加载 4 5 public static Single getInstance(){ 6 if(null == s)//双重判断提高效率,后来的就不需要再判断锁内的内容,如果不符合条件就直接return 7 synchronized(Single.class)//同步代码块,该处的锁是这个类的字节码对象 8 { 9 if(null ==s) 10 s = new Single(); 11 } 12 return s; 13 } 14 }
二者的区别就是:懒汉式提供了延迟加载,可以在需要时再根据对象是否存在再实例化对象;但是在多线程时会出现安全问题,因此开发中多使用饿汉式。