单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行建立这个实例的一种模式。安全
单例模式有 3 个特色:spa
饿汉式单例code
package single; //饿汉式单例 public class hungry { //构造器私有化 private hungry(){ } //一启动类就直接加载 //可能会形成内存浪费 byte[] byte1=new byte[1024*1024]; byte[] byte2=new byte[1024*1024]; byte[] byte3=new byte[1024*1024]; byte[] byte4=new byte[1024*1024]; private final static hungry hun=new hungry(); public static hungry getHun(){ return hun; } }
懒汉式单例对象
package single; //懒汉式单例 public class LazyMan { // 构造器私有化 private LazyMan(){ } private volatile static LazyMan lazyMan; // 双重检测锁的懒汉式单例 DCL单例模式 public static LazyMan getInstance(){ // 提升效率,这一层if判断 if (lazyMan==null){ // 加锁 synchronized (LazyMan.class){ if(lazyMan==null){ lazyMan=new LazyMan();//不是原子性操做,不要在属性值上加volatile } } } return lazyMan; } }
静态内部类单例blog
package single; //静态内部类 public class Holder { // 构造器私有 private Holder(){ } // 调用静态内部类 public static Holder getInstance(){ return holder.HOLDER; } // 静态内部类 public static class holder{ private final static Holder HOLDER=new Holder(); } }
这三种是不安全的单例模式,能够经过反射拿到类中的属性和方法内存
以后更新枚举单例模式get