• 单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式


    单例模式

    单例模式Singleton是一种创建型模式,指某个采用Singleton单例模式,则这个类在同一个

    JVM上,只能产生一个实例供外部访问,并且仅提供一个全局的访问方式。

    懒汉式

    懒汉式线程不安全

    public class Singleton1 {
    	private static Singleton1 instance;
    	
    	// 构造方法私有化!!!
    	private Singleton1() {};
    	
    	public static Singleton1 getInstance() {
    		if(instance == null) {
    			instance = new Singleton1();
    		}
    		return instance;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    饿汉式

    饿汉式线程安全

    public class Singleton2 {
    	private static final Singleton2 instance = new Singleton2();
    	// 构造方法私有化
    	private Singleton2() {};
    
    	public static Singleton2 getInstance() {
    		return instance;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    线程安全的单例模式

    1. 饿汉式线程安全
    2. 全局锁线程安全
    3. 静态代码块创建单例对象线程安全
    4. 双重校验锁实现线程安全
    5. 静态内部类实现线程安全的单例模式
    6. 内部枚举类实现线程安全
    • 全局锁

      public class Singleton3 {
      	private static Singleton3 instance;
      
      	// 构造方法私有化
      	private Singleton3() {};
      
      	// 通过synchronized添加全局锁实现线程安全
      	public static synchronized Singleton3 getInstance() {
      		if (instance == null) {
      			instance = new Singleton3();
      		}
      		return instance;
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
    • 静态代码块

      public class Singleton4 {
      	private static final Singleton4 instance;
      	
      	// 静态代码块创建单例对象
      	static {
      		instance = new Singleton4();
      	}
      	
      	// 构造方法私有化
      	private Singleton4(){}
        
      	public static Singleton4 getInstance() {
      		return instance;
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    • 双重校验锁

      public class Singleton5 {
      
      	private static Singleton5 instance;
      
      	private Singleton5() {
      	}
      
      	public static Singleton5 getInstance() {
      		if (instance == null) {
      			synchronized (Singleton5.class) {
      				if (instance == null) {
      					instance = new Singleton5();
      				}
      			}
      		}
      		return instance;
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
    • 静态内部类

      public class Singleton6 {
      	// 构造方法私有化
      	private Singleton6() {};
      	
      	// 静态内部类
      	private static class SingletonHolder{
      		// 创建单例对象
      		private static Singleton6 instance = new Singleton6();
      	}
      	public static Singleton6 getInstance() {
      		return Singleton6.SingletonHolder.instance;
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    • 静态枚举类

      public class Singleton7 {
      	private Singleton7() {}
      	
      	// 内部枚举类
      	enum SingletonEnum{
      		INSTANCE;
      		
      		// 单例对象
      		private Singleton7 instance;
          
      		private SingletonEnum() {
      			instance = new Singleton7();
      		}
          
      		private static Singleton7 getInstance() {
      			return SingletonEnum.INSTANCE.instance;
      		}
      	}
      }	
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
  • 相关阅读:
    变量/函数提升,闭包作用域,作用域链
    使用Harr特征的级联分类器实现目标检测
    项目案例 | 丝路新贸易创新中心项目EPC模式下设计BIM技术应用
    金九银十,阿里高级测开给面试者的十大建议
    LeetCode337:打家劫舍III
    java继承的优缺点分析
    JavaScript面试必问 上
    Go 函数的健壮性、panic异常处理、defer 机制
    海尔智家:“超预期”成为“新常态”
    AIGC:python 文生图代码(python + stable-diffusion+ cuda)
  • 原文地址:https://blog.csdn.net/HakerDONG/article/details/136358434