单例模式创建的几种方式

  单例设计模式是我们开发中常用的设计模式,改设计模式可以减少系统的开销,在系统设置全局访问点,共享系统资源,向我们的Spring bean 管理就是单例模式的体现

  而且在日常开发中,也会需要使用到单例模式

  常用的单例模式有:

  1.饿汉式:------>    一旦类初始化就会创建该对象,安全性高,线程是安全的 

public class Singn {
    
            //static 类加载就创建该类的对象
            private static Singn demo =new Singn();
            //构造方法私有化,外部不能直接创建对象
            private Singn(){
        
            }
            //提供一个公共方法返回对象,提供一个对象提取点
                public static Singn getInstance(){
                return demo;
            }

  2.懒汉式 ---------->  线程安全,需要方法同步,并发效率低,单例延时加载,在使用的时候才会去加载判断,所以需要方法的同步

            public class Singn {
    
            //声明对象
            private static Singn demo ;
            //构造方法私有化
            private Singn(){
        
                    }
            //使用时候进行创建对象判断 synchronized 进行同步,没有就创建,有就不创建,在高并发情况下,速度就会大大折扣
            public static synchronized Singn getInstance(){
                if(demo==null){
                demo=new Singn();
                }
                return demo;
                }

  3.静态内部类,以为类的加载是天然线程安全的

public class Singn {
    
            //定义静态内部类
            private static class signInstance{
            private static final Singn sn =new Singn();
                }
        
                //私有化构造器
                private Singn(){
            
                }
                //调用内部类方法得到对象
        
                public static Singn si(){
                    return signInstance.sn;
                }
                }

  4,.双重检测锁:

public class WorkTestEntity {
    
    // 私有化构造对象
    private  WorkTestEntity (){}
    //声明
    private static WorkTestEntity sign;

    public static WorkTestEntity getInstance(){
        
        //双重检测机制,当对象为空的时候
        if(sign==null) {
            //防止并发,我们需要再进行加锁判断,对象是不是真的为空,加入同步代码块
            synchronized(WorkTestEntity.class) {
                
                if(sign==null) {
                    
                    sign =new WorkTestEntity();
                }

            }

        }
        return sign;
        
        
    }
}
原创打造,多多指教
原文地址:https://www.cnblogs.com/iscys/p/9608591.html