三个特点
- 单例类只有一个实例对象;
- 该单例对象必须由单例类自行创建;
- 单例类对外提供一个访问该单例的全局访问点;
实现模式1,懒汉模式。需要加关键字volatile 和 synchronized才能实现线程安全,加了之后有性能开销。
public class LazySingleton { private static volatile LazySingleton instance=null; //保证 instance 在所有线程中同步 private LazySingleton(){} //private 避免类在外部被实例化 public static synchronized LazySingleton getInstance() { //getInstance 方法前加同步 if(instance==null) { instance=new LazySingleton(); } return instance; } }
实现模式2,饿汉模式。实例在类加载时就创建,线程安全。
public class HungrySingleton { private static final HungrySingleton instance=new HungrySingleton(); private HungrySingleton(){} public static HungrySingleton getInstance() { return instance; } }
应用场景
- 数据库线程池
- 应用多线程线程池
- 操作系统中的文件系统、回收站、资源管理器
扩展
单例可以被扩展为有限多例模式
来源:https://www.cnblogs.com/tuofan/p/12305646.html