饿汉式单例

public class SingleTon01 {

    private static SingleTon01 singleTon01 = new SingleTon01();

    private SingleTon01(){
        //添加反射判断,防止单例被反射通过构造器破坏
        if(singleTon01!=null){
           	throw new RunTimeException("单例模式下禁止通过反射创建实例!");
        }
    }

    public static SingleTon01 getInstance(){
        return singleTon01;
    }
}

懒汉式单例

public class SingleTon02 {

    private static SingleTon02 singleTon02;

    private SingleTon02(){
    }

    public static synchronized SingleTon02 getSingleTon02(){
        if(singleTon02==null){
            singleTon02 = new SingleTon02();
        }
        return singleTon02;
    }
}

DCL双重检测锁

public class SingleTon03 {
    private static SingleTon03 singleTon03;
    private SingleTon03(){
        //添加反射判断,防止单例被反射通过构造器破坏
        if(singleTon03!=null){
           	throw new RunTimeException("单例模式下禁止通过反射创建实例!");
        }
    }
    public static SingleTon03 getInstance(){
        //为了防止每次都进行加锁同步 首先判断是否需要初始化单例
        if(singleTon03==null){
            synchronized (SingleTon03.class){
                //双重检测锁机制,防止其他线程阻塞在获取锁处,锁释放后造成重复创建
                if(singleTon03==null){
                    singleTon03 = new SingleTon03();
                }
            }
        }
        return singleTon03;
    }
}