//单例模式使用场景:1.固定配置类 2.某种比较耗费资源的连接 class Dajia{ //知识点1:私有化构造器,使得外部无法new对象,只能从我这获取 private Dajia(){ } //使用懒汉式,懒加载,不用的时候减小内存开销 private static Dajia dajia = null; //知识点2:提供工厂方法,将这个对象给你 public static Dajia dajia(){ //知识点3:第一判断非空的作用是提高效率,防止下一次来访问时不需要每次都锁住方法或代码块获取单例 if(dajia == null){ //知识点4:要用到class锁,因为当前对象未被创建,锁是为了防止出现多个实例对象 synchronized (Dajia.class){ //知识点5:第二重判断非空是为了防止返回空的对象 if(dajia == null){ dajia = new Dajia(); } } } return dajia; } }