登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
安全
›
Java单例模式:从实战到面试的深度解析
Java单例模式:从实战到面试的深度解析
[ 复制链接 ]
拼潦
2025-5-31 23:59:01
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
结论先行
饿汉式
:线程安全但可能造成资源浪费,推荐在初始化成本低的场景使用
懒汉式
:需要解决线程安全问题,推荐使用双重检查锁+volatile优化
静态内部类
:最佳实践方案,完美平衡延迟加载与线程安全
枚举单例
:JDK1.5+推荐方案,天然防反射/序列化破坏
实际开发中优先选择枚举或静态内部类实现
文章持续更新,可以微信搜一搜「
半个脑袋儿
」第一时间阅读
一、核心实现方式
1. 饿汉式
class ClassA {
private static final ClassA INSTANCE = new ClassA();
public static ClassA getInstance() {
return INSTANCE;
}
private ClassA() {} // 防止反射创建
}
复制代码
特点
:
类加载时立即初始化(可能造成资源浪费)
天然线程安全
需处理反射攻击(添加私有构造器判空逻辑)
2. 双重检查锁懒汉式
class ClassB {
private static volatile ClassB instance;
public static ClassB getInstance() {
if (instance == null) { // 第一次检查
synchronized (ClassB.class) { // 同步锁
if (instance == null) { // 第二次检查
instance = new ClassB();
}
}
}
return instance;
}
private ClassB() {}
}
复制代码
关键点
:
volatile防止指令重排序(JDK5+的JMM修复)
两次null检查确保性能与线程安全
仍可能被反射破坏单例
3. 静态内部类
class ClassC {
private static class Holder {
static final ClassC INSTANCE = new ClassC();
}
public static ClassC getInstance() {
return Holder.INSTANCE;
}
private ClassC() {}
}
复制代码
优势
:
利用类加载机制保证线程安全
实现延迟加载(调用getInstance时才会初始化)
代码简洁无锁
4. 枚举式
enum EnumSingleton {
INSTANCE;
public void businessMethod() {
// 业务方法
}
}
复制代码
绝对优势
:
天生防反射攻击(枚举类没有构造器)
自动处理序列化/反序列化
代码极度简洁
二、实战应用场景
1. 配置管理类
public enum ConfigManager {
INSTANCE;
private Properties props = new Properties();
ConfigManager() {
try(InputStream is = getClass().getResourceAsStream("/app.properties")) {
props.load(is);
}
}
public String getProperty(String key) {
return props.getProperty(key);
}
}
复制代码
2. 数据库连接池
public class ConnectionPool {
private static final int MAX_SIZE = 100;
private BlockingQueue<Connection> pool = new ArrayBlockingQueue<>(MAX_SIZE);
private static class Holder {
static final ConnectionPool INSTANCE = new ConnectionPool();
}
private ConnectionPool() {
// 初始化连接池
}
public static ConnectionPool getInstance() {
return Holder.INSTANCE;
}
public Connection getConnection() throws InterruptedException {
return pool.take();
}
}
复制代码
3. Spring中的单例
Spring默认的Bean作用域就是单例
通过IOC容器管理生命周期
与设计模式单例的区别:每个容器对应一个实例
三、高频面试题解析
Q1:DCL(双重检查锁)为什么要加volatile?
答
:防止指令重排序导致返回未初始化完成的对象。new操作不是原子操作,分为:
分配内存空间
初始化对象
将引用指向内存地址
不加volatile可能导致步骤2和3重排序,其他线程可能拿到未初始化完成的对象。
Q2:如何防止反射攻击?
private ClassC() {
if (Holder.INSTANCE != null) {
throw new RuntimeException("禁止反射创建!");
}
}
复制代码
Q3:枚举单例如何防止反射?
枚举类的构造方法由JVM特殊处理
反射newInstance方法会直接抛出异常
Q4:单例对象什么时候会被回收?
只有当加载该类的ClassLoader被回收时才会被回收
一般情况(使用系统类加载器)会与JVM生命周期一致
Q5:单例模式的优缺点?
优点
:
内存中只有一个实例,减少内存开销
避免对资源的多重占用
缺点
:
违背单一职责原则(既要管理实例又要处理业务)
扩展困难(需要修改源码)
测试困难(全局状态难以隔离)
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Java
单例
模式
实战
面试
相关帖子
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
MyBatis-Plus实战:Spring Boot数据库操作效率提升10倍
Spring Cloud Gateway实战:微服务API网关从零到一
理论都会,实战就废?7个分析模板,帮你打通任督二脉
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
0
89
魄柜
2026-04-05
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
1
724
梢疠
2026-04-05
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
0
987
嗣伐
2026-04-05
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
0
251
院儿饯
2026-04-05
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
2
919
左丘平莹
2026-04-05
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
0
678
格恳绌
2026-04-05
业界
开发实战:asp.net core + ef core 实现动态可扩展的分页方案
1
239
终秀敏
2026-04-05
安全
MyBatis-Plus实战:Spring Boot数据库操作效率提升10倍
1
903
副我
2026-04-06
安全
Spring Cloud Gateway实战:微服务API网关从零到一
0
197
后沛若
2026-04-06
业界
理论都会,实战就废?7个分析模板,帮你打通任督二脉
0
5
钱闲华
2026-04-07
回复
(35)
梦霉
2025-10-24 00:44:49
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个有用。
庇床铍
2025-11-9 05:05:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
暴灵珊
2025-11-24 08:56:18
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
陶田田
2025-12-21 21:40:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个有用。
啪炽
2025-12-26 23:00:16
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
劳怡月
2026-1-6 19:21:43
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
赫连如冰
2026-1-13 21:56:35
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
损注
2026-1-14 00:17:47
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
人弧
2026-1-18 14:24:28
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
恙髡
2026-1-20 16:42:38
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
暴灵珊
2026-1-22 13:11:23
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
石娅凉
2026-1-22 13:33:16
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
扈怀易
2026-1-25 15:36:21
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
揉幽递
2026-2-2 08:35:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
仁夹篇
2026-2-3 07:39:35
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
伯绮梦
2026-2-3 11:21:45
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
焦听云
2026-2-3 22:55:42
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
账暴
2026-2-6 06:04:22
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
处匈跑
2026-2-8 02:12:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
拼潦
2026-2-8 02:12:55
关注
0
粉丝关注
26
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991126
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9516
6
宋子
9876
7
韶又彤
9909
8
荪俗
8990
9
蓬森莉
9868
10
俞瑛瑶
10000
查看更多
今日好文热榜
592
SpringCloud进阶--RabbitMQ消息队列(完结
416
一、先了解:MCP 公开服务市场
256
《评岐金兰〈自感类型学〉:一种实然内在观
393
如何在手机微信上免费批量删除PDF页面?
154
紧急!GitHub Copilot 宣布使用个人数据训
654
龙芯2k0300 - 走马观碑组Gazebo仿真环境搭
5
理论都会,实战就废?7个分析模板,帮你打
446
开源重置 沙丘2 游戏 · Dune Legacy
957
vue3这些常见指令你封装了吗
423
【Ubuntu】配置 WSL 环境时,启动虚拟机平
6
Flutter3.41+DeepSeek智能AI应用|flutter3+
275
深度解析Claude Code 51万行源码背后的设计
818
AI时代的变更到底怎么管?(抛砖引玉版)
699
OJ平台远端代码沙箱开发第一周:需求拆解与
980
万字详解 RAG 基础概念:什么是 RAG? 为什
398
天谋科技入选北京市 2026 年第一批专精特新
160
AI对普通人到底有什么用?这8个场景告诉你
81
【节点】[Reciprocal节点]原理解析与实际应
254
为什么使用 Skillsbase 维护自己的 Skills
369
WorkBuddy:快速开启龙虾(OpenClaw)之旅