单例模式作用特点及常见的单例模式分析


单例模式:

也就是说,在整个生命周期中,这个对象的生产总是相同的,并且没有改变。它保证一个类只有一个实例,并提供一个全局访问点来访问它。

角色:

当需要线程安全时,确保类实例的唯一性和线程安全。当不需要多个实例时,保证了类实例的统一性。不要浪费记忆。

features:

public方法获取实例、私有构造方法和私有成员变量。

一,singleton用作类变量并直接初始化,也就是说,类中的所有变量都将被初始化* singleton用作类变量并在初始化过程中被收集到方法中,这可以确保100%的同步,但是因为它不会延迟加载。单例加载后不能长时间使用,即实例打开的空间会存在很长时间*虽然可以实现唯一的多线程实例,但不能进行惰性加载;

2,Lazy

*

Description Lazy singleton模式*可以保证延迟加载,但是线程是不安全的*当两个线程访问时,单个实例的唯一性无法保证

3,Lazy plus同步方法*

Description Lazy同步方法singleton模式*可以保证延迟加载。可以保证单例实例的唯一性,但是synchronizeed关键字的排他性导致* getInstance0方法只能由一个线程同时访问。糟糕的表现。

4,双重检查锁案例*

描述双重检查锁案例(双重检查)易变*对延迟同步方法的改进。当两个线程发现singleton null时,只有一个线程可以进入同步代码块。*它不仅满足了延迟加载,还确保了线程的唯一性。*如果没有意愿,有时可能会报告NPE(JVM操作指令重新排序)*实例对象的变量可能没有被实例化,其他线程也没有被实例化以获得单例变量。*未完成初始化的实例将在调用其方法时引发空指针异常。

5,静态内部类的单个实例*

静态内部类的描述单例模式*在单例类初始化中不创建单例实例,单例实例在静态内部类中定义。*当静态内部类被主动创建时,将创建单例静态变量,这是最好的单例模式之一