当前位置: 首页 > news >正文

java 单例模式

Java中实现单例模式的常见方式有两种:懒汉式和饿汉式。以下是这两种方式的简单示例:

饿汉式

饿汉式单例模式在类加载时就完成了实例的初始化,以空间换时间,确保了实例的唯一性。

public class Singleton {// 在自己内部定义自己一个实例,是不会被外界访问的private static final Singleton instance = new Singleton();// 构造器私有化,外部无法直接通过new来实例化对象private Singleton() {}// 对外提供一个公共的静态方法,返回唯一实例public static Singleton getInstance() {return instance;}}

懒汉式

懒汉式单例模式只有在真正需要使用时,才会创建实例,实现了懒加载。

public class Singleton {// 声明变量private static Singleton instance = null;// 构造器私有化private Singleton() {}// 提供一个静态方法,当使用到该方法时,才去创建instancepublic static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}

懒汉式虽然实现了懒加载,但是在多线程环境下可能会创建多个实例,因此需要加锁处理,这就是上面示例中使用synchronized关键字的原因。但是,加锁会影响效率。

双重检查锁定(Double-Checked Locking)

为了解决懒汉式的线程安全问题,同时又不牺牲效率,可以使用双重检查锁定模式。

public class Singleton {// 使用volatile关键字保其可见性和有序性private static volatile Singleton instance = null;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}}

这种方式既实现了线程安全,又避免了每次调用getInstance方法时都需要进行同步。

枚举方式

Java语言规范提供的一种更简洁的单例实现方式是使用枚举。
 

public enum Singleton {INSTANCE;public void someMethod() {// 实例方法}}

使用枚举方式实现单例不仅简洁,而且提供了序列化机制,并由JVM从根本上提供保障,避免多次实例化,是实现单例模式的最佳方法。

http://www.lryc.cn/news/388823.html

相关文章:

  • 爬虫 属性 方法
  • HEX文件
  • 人机融合的智能操作系统
  • 数据结构之二叉树概念
  • Linux源码阅读笔记08-进程调度API系统调用案例分析
  • 短视频抓取:成都柏煜文化传媒有限公司
  • proto的前后端使用
  • 华为解决固态硬盘致命弱点:延长30~50%的SSD寿命
  • 登录验证码高扩展性设计方案
  • Spring MVC数据绑定和响应——数据回写(一)普通字符串的回写
  • 怎样才能更好地保护个人账号的安全
  • react native优质开源项目
  • 速盾:海外cdn有哪些优缺点呢?
  • Unity Shader 软粒子
  • nextTick的应用和原理理解
  • .Net Core 微服务之Consul
  • 速盾:cdn流量调度
  • Windows批处理入门:快速掌握批处理脚本的基本技巧
  • 【C++之unordered_set和unordered_map的模拟实现】
  • 服务器使用别人的conda
  • 农村程序员陈随易2024年中总结
  • Spring Boot中的日志管理最佳实践
  • python基础语法 004-2流程控制- for遍历
  • 【高考志愿】医学
  • 音视频开发31 FFmpeg 编码- avcodec_find_encoder和avcodec_find_encoder_by_name
  • 大模型压缩:基于贝叶斯优化的自适应低秩分解
  • 【Python函数编程实战】:从基础到进阶,打造代码复用利器
  • ZooKeeper 应用场景深度解析
  • 动手学深度学习(Pytorch版)代码实践 -计算机视觉-41目标检测数据集
  • 2.2章节python的变量和常量