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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java语言实现养老院信息管理系统(SQL Server数据库)
- 社区居民诊疗健康-JAVA-基于SpringBoot的社区居民诊疗健康管理系统设计与实现(毕业论文)
- ChromeSetup.zip
- 大黄蜂V14旋翼机3D
- 体育购物商城-JAVA-基于springboot的体育购物商城设计与实现(毕业论文)
- 三保一评关系与区别分析
- 星形发动机3D 星形发动机
- 机考样例(学生).zip
- Day-05 Vue22222222222
- 经过数据增强后番茄叶片病害识别,约45000张数据,已标注
- 商用密码技术及产品介绍
- CC2530无线zigbee裸机代码实现WIFI ESP8266上传数据到服务器.zip
- 文物管理系统-JAVA-基于springboot的文物管理系统的设计与实现(毕业论文)
- 店铺数据采集系统项目全套技术资料.zip
- 数据安全基础介绍;数据安全概念
- 目标检测数据集: 果树上的tomato西红柿图像检测数据【VOC标注格式、包含数据和标签】