Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 在 Java 中,单例模式的写法有好几种,主要有懒汉式单例、饿汉式单例、登记式单例等。 懒汉式单例是一种常见的单例模式实现方式,它在第一次调用的时候实例化自己。下面是懒汉式单例的四种写法: 1、基本懒汉式单例 public class Singleton1 { private Singleton1() {} private static Singleton1 single = null; public static Singleton1 getInstance() { if (single == null) { single = new Singleton1(); } return single; } } 这种写法的问题是它没有考虑线程安全问题,在并发环境下很可能出现多个 Singleton1 实例。 2、懒汉式单例(加同步) public class Singleton2 { private Singleton2() {} private static Singleton2 single = null; public static synchronized Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } } 这种写法保证了懒汉式单例的线程安全,但是它的 synchronized 关键字会带来性能上的损失。 3、懒汉式单例(双重检查锁定) public class Singleton3 { private Singleton3() {} private static Singleton3 single = null; public static Singleton3 getInstance() { if (single == null) { synchronized (Singleton3.class) { if (single == null) { single = new Singleton3(); } } } return single; } } 这种写法也保证了懒汉式单例的线程安全,并且减少了性能上的损失。 4、懒汉式单例(静态内部类) public class Singleton4 { private Singleton4() {} private static class SingletonHolder { private static Singleton4 single = new Singleton4(); } public static Singleton4 getInstance() { return SingletonHolder.single; } } 这种写法也保证了懒汉式单例的线程安全,并且可以避免加锁带来的性能损失。 在 Java 中,类加载器加载内容的顺序是从上往下,静态后动态,先属性后方法。 Java 类加载器会先加载静态变量,然后加载对象实例化,最后加载成员变量和方法。 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。懒汉式单例是一种常见的单例模式实现方式,它有四种写法,每种写法都有其优缺。
剩余10页未读,继续阅读
- 粉丝: 109
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《全面解析图像平滑处理:多种滤波方法及应用实例》
- 关于 v s 2019 c++20 规范里的 S T L 库里模板 decay-t<T>
- RL Base强化学习:信赖域策略优化(TRPO)算法TensorFlow实现
- RL Base强化学习:信赖域策略优化(TRPO)算法Pytorch 实现
- 全球各国家及城市json数据
- 用Rust实现仿nginx,力争实现一个可替代方案,http/https代理, socks5代理, 负载均衡, 反向代理, 静态文件服务器,四层TCP/UDP转发,websocket转发, 内网穿透N
- 计算机二级考试选择题练习模拟题70道及答案.doc
- 数据中台(大数据平台)数据建模存储标准规范.pdf
- Linux 平台下基于 Rust + GTK 开发的网易云音乐播放器
- 基于Rust语言的新一代组装式应用开发框架,它强调 简单性、可扩展性和生产力