单例模式~

概要

确保一个类只有一个实例,并提供一个全局访问点来访问该实例。

主要解决的问题

频繁创建和销毁全局使用的实例,减少开销。

解决思路

如果有该实例就返回,没有就创建。

应用场景

数据库连接池、线程池、spring中service等

几种实现方式

懒汉式 (多线程不安全)

实现简单

public class Singleton {private static Singleton instance;private Singleton(){}private static Singleton getinstance(){if(instance==null){instance = new Singleton();}return instance;}
}

懒汉式(多线程安全)

优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。

public class Singleton {private static Singleton instance;private Singleton(){}private static synchronized Singleton getinstance(){if(instance==null){instance = new Singleton();}return instance;}
}

饿汉式(多线程安全)

优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。

public class Singleton {private static Singleton singleton = new Singleton();private Singleton(){}public static Singleton getInstance(){return singleton;}
}

双重检查(线程安全)

public class Singleton {private static volatile Singleton singleton;private Singleton(){}public static Singleton getInstance(){if (singleton==null){synchronized (Singleton.class){if (singleton==null){singleton = new Singleton();}}}return singleton;}
}

内部静态类(线程安全)

public class Singleton {private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}private Singleton() {}public static final Singleton getInstance() {return SingletonHolder.INSTANCE;}
}

枚举 

public enum SingletonTwo {INSTANCE;public void whateverMethod() {}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[web]-反序列化漏洞-easy入门

打开网站看到代码&#xff1a; <?php highlight_file(__FILE__); class easy{ public $cmd; public function __wakeup(){ system($this->cmd); } } unserialize($_GET[pop]); ?> 是一个简单的反序列化题目&#xff0c;在本地启动php_study,生成序列化字符串&…

fatal error解决方法的详细教程,电脑出现错误代码fatal error问题

电脑出现“fatal error”&#xff08;致命错误&#xff09;通常指的是操作系统、应用程序或电脑硬件在执行期间遇到了非常严重的问题&#xff0c;导致程序不能正常继续运行。这种错误往往需要立即关注和解决&#xff0c;因为它可能影响到数据完整性、系统安全或者用户体验。 导…

JVM(day2)经典垃圾收集器

经典垃圾收集器 Serial收集 使用一个处理器或一条收集线程去完成垃圾收集工作&#xff0c;更重要的是强调在它进行垃圾收集时&#xff0c;必须暂停其他所有工作线程&#xff0c;直到它收集结束。 ParNew收集器 ParNew 收集器除了支持多线程并行收集之外&#xff0c;其他与 …

手写简易版Spring IOC容器01【学习】

文章目录 BeanDefinitionbeanDefinition类 单例对象单例对象注册(SingletonBeanRegistry)DefaultSingletonBeanRegistry 模板方法 BeanFactoryBeanFactory接口AbstractBeanFactory 抽象工厂模板 (getBean)AbstractAutowireCapableBeanFactory (createBean 创建bean)DefaultList…

大根堆的实现和堆排序

//交换 public static void swap(int[] arr , int i , int j){arr[i] arr[i] ^arr[j];arr[j] arr[i] ^arr[j];arr[i] arr[i] ^arr[j]; } //大根堆 public static class MyMaxHeap{private int[] heap;private final int limit;private int heapSize;public MyMaxHeap(int limit…

北京邮电大学,中央空调的分户计费系统

北京邮电大学 中央空调如何公平、公正、合理的收取费用&#xff0c;一直都是各建筑管理者的首要问题。北京邮电大学也面临着能源分配不公&#xff0c;学校管理者空调收费管理困难等问题。根据学校的具体情况&#xff0c;拓森为其制定了一套中央空调管理运营方案—无线中央空调…

利用docker和docker-compose部署airflow

先决条件 内存需要至少有4GB 环境准备 部署安装docker sudo dnf install -y docker sudo systemctl enable docker --now sudo usermod -aG docker $USER newgrp docker exec bash 部署安装docker-compose # docker-compose (latest version) $-> sudo curl -L htt…

一个小问题导致,AI大模型集体翻车?

9.11大还是9.9大&#xff1f; 这两天大家都在说ChatGPT大模型翻车了 &#xff01; 这到底是怎么个事儿呢&#xff1f; 原来是最近有人想ChatGPT等大模型提了一个简单的问题&#xff1a; 9.11 大还是 9.9 大&#xff1f; 答案显而易见&#xff0c;然而众多大模型却给出了错误…

初学Linux之常见指令(下)

初学Linux之常见指令&#xff08;下&#xff09; 文章目录 初学Linux之常见指令&#xff08;下&#xff09;1. echo 指令2. cat 指令3. more 指令4. less 指令5. head 和 tail 指令6. date 指令7. cal 指令8. which 指令9. alias 指令10. find 指令11. grep 指令12. zip 和 unz…

vue排序

onEnd 函数示例&#xff0c;它假设 drag.value 是一个包含多个对象&#xff08;每个对象至少包含 orderNum 和 label 属性&#xff09;的数组&#xff0c;且您希望在拖动结束后更新所有元素的 orderNum 以反映新的顺序&#xff1a; function onEnd(e) { // 首先&#xff0c;确…

单链表<数据结构 C版>

目录 概念 链表的单个结点 链表的打印操作 新结点的申请 尾部插入 头部插入 尾部删除 头部删除 查找 在指定位置之前插入数据 在任意位置之后插入数据 测试运行一下&#xff1a; 删除pos结点 删除pos之后结点 销毁链表 概念 单链表是一种在物理存储结构上非连续、非顺序…

熵、交叉熵、KL散度

这里写目录标题 熵KL散度引入交叉熵。交叉熵的二分类公式&#xff1a; 再次理解SoftMax函数结束 熵 熵&#xff0c;是一个物理上的概念&#xff0c;表示一个系统的不确定性程度&#xff0c;或者表示一个系统的混乱程序。 下边是信息熵的演示&#xff1a; 信息熵的公式如下&…

Vue:axios请求数据转存leanCloud

思路&#xff1a; 采用axios请求需要的数据&#xff0c;查看leanCloud中数据批量存储的格式&#xff0c;将两个数据进行对比&#xff0c;将请求得到的数据封装为云服务存储的格式&#xff0c;再发leanCloud存储数据的请求完成转存 1.封装js代码 //批量操作新增数据 import r…

【计算机视觉前沿研究 热点 顶会】CVPR 2024中与域适应、分布外目标检测相关的论文

测试时间线性分布外检测 分布外&#xff08; OOD&#xff09;检测旨在通过在输入样本显著偏离训练分布&#xff08;分布中&#xff09;时触发警报来解决神经网络的过度置信度预测&#xff0c;这表明输出可能不可靠。当前的 OOD 检测方法探索各种线索来识别 OOD 数据&#xff0…

【Docker】Docker-compose 单机容器集群编排工具

目录 一.Docker-compose 概述 1.容器编排管理与传统的容器管理的区别 2.docker-compose 作用 3.docker-compose 本质 4.docker-compose 的三大概念 二.YML文件格式及编写注意事项 1.yml文件是什么 2.yml问价使用注意事项 3.yml文件的基本数据结构 三.Docker-compose …

MySQL简介以及对数据库的操作

一、什么是数据库 1.数据库&#xff08;Database&#xff0c;简称DB&#xff09;概念&#xff1a; 长期存放在计算机内&#xff0c;有组织、可共享的大量数据的集合&#xff0c;是一个 数据“仓库”。 2、数据库的特点 结构化&#xff1a;数据在数据库中的存储可以依靠二 维表…

鸿蒙语言基础类库:【@system.sensor (传感器)】

传感器 说明&#xff1a; 从API Version 8开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.sensor]。本模块首批接口从API version 4开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。该功能使用需要对应硬件支持&#xff0c;仅支持…

对象存储解决方案:高性能分布式对象存储系统MinIO

文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 建议使用RPM或DEB安装方式2.2 创建环境变量文件2.3 启动MinIO服务2.4 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3…

什么是信息指纹和信息加密——《数学之美》第16、17章以及其他各种资料的读书笔记

目录 1. 信息指纹 1.1 概念 1.2 相关算法的演进历程 1.3 哈希碰撞 1.4 雪崩效应 1.5 应用场景 2. 信息加密 2.1 密码学的简要历史 2.1.1 古代密码学&#xff1a;智慧的萌芽 2.1.2 中世纪至文艺复兴&#xff1a;密码术的兴起 2.1.3 近代密码学&#xff1a;机械密码机的…

CentOS配置时钟服务

一、ntp协议 1.1 基础 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是用于同步计算机网络中各个设备时间的协议。 下面了解一下 ntp 的配置选项 1.) iburst 功能: 通过发送一组八个数据包来加速初始同步。 用法: server 0.pool.ntp.org i…