概述
单例:某个类,对外永远只有一个对象。
实现
步骤:
/** * 单例模式:懒汉式套路基础上加入并发控制(synchronized、volatile),保证多线程环境下,对外始终只有一个对象。 * 1、构造器私有化---->避免外部 new 构造器 * 2、提供私有的静态属性---->储存对象地址 * 3、提供公共的静态方法---->获取属性 */
示例代码:
class Del{ /** * 2、提供私有的静态属性---->储存对象地址 * 在调用方法的时候才创建对象:懒汉式 * 加入volatile保证创建对象不出错,不会被某个对象拿到空对象。 */ private static volatile Del instance; //1、构造器私有化---->避免外部 new 构造器 private Del(){ } //3、提供公共的静态方法---->获取属性(唯一对象) public static Del getInstance(){ //双重检测,提供性能。 if(null!=instance){ return instance; } synchronized (Del.class) { if (instance == null) { //存在指令重排的可能:创建一个对象:1、开辟空间。2、初始化对象信息。3、返回对象地址给引用。 instance = new Del(); } return instance; } } }
测试程序:
public class LeaningThread { public static void main(String[] args) throws InterruptedException { new Thread(()->{ System.out.println(Thread.currentThread().getName()+":"+Del.getInstance()); },"线程一").start(); new Thread(()->{ System.out.println(Thread.currentThread().getName()+":"+Del.getInstance()); },"线程二").start(); new Thread(()->{ System.out.println(Thread.currentThread().getName()+":"+Del.getInstance()); },"线程三").start(); System.out.println(Thread.currentThread().getName()+":"+Del.getInstance()); } }
运行结果:
总结
实现单例模式的方法有很多。
步骤通常是:
* 1、构造器私有化---->避免外部 new 构造器标签:DCL,Java,Thread,对象,----,instance,Del,单例,new From: https://www.cnblogs.com/lurenjia-bky/p/16887775.html
* 2、提供私有的静态属性---->储存对象地址
* 3、提供公共的静态方法---->获取属性(对象)