Java中单例模式怎么用
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章给大家分享的是有关Java中单例模式怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注意1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例
千家信息网最后更新 2025年11月17日Java中单例模式怎么用
这篇文章给大家分享的是有关Java中单例模式怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
注意
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
优点
1.在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。
2.避免对资源的多重占用(比如写文件操作)。
缺点
1.没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
使用场景
1.要求生产唯一序列号。
2.WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
3.创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
一、实现方式
package com.asurplus.common.singleton.style1;import lombok.extern.slf4j.Slf4j;import java.util.Objects;@Slf4jpublic class ResUtils { private volatile static ResUtils instance = null; /** * 私有的构造方法 */ private ResUtils() { } /** * 提供获取实例的方法 * * @return */ public static ResUtils getInstance() { // 为空才创建 if (Objects.isNull(instance)) { // 避免并发操作时 synchronized (ResUtils.class) { // 为空才创建 if (Objects.isNull(instance)) { // 创建新对象 instance = new ResUtils(); log.info("创建了对象"); } } } return instance; }}我们将其构造方法私有化,从而外部无法创建实例,并且我们提供了获取唯一实例的方法,这样我们就能从外部得到该实例。
二、实现方式
package com.asurplus.common.singleton.style2;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ResUtils2 { /** * 静态内部类 */ private static class ResUtils2Holder { private static ResUtils2 instance = new ResUtils2(); } /** * 提供获取实例的方法 * * @return */ public static ResUtils2 getInstance() { return ResUtils2Holder.instance; }}我们使用静态内部类的方法创建实例,因为 JVM 只会加载一次的原理,所以最终只会创建一个实例,并且提供了获取实例的方法,这样我们就能从外部得到该实例。
三、测试
package com.asurplus.common.singleton;import com.asurplus.common.singleton.style1.ResUtils;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 单例模式 */public class TestMain { public static void main(String[] args) { // 创建线程池 ExecutorService executorService = Executors.newFixedThreadPool(10); for (int i = 0; i < 100; i++) { executorService.execute(ResUtils::getInstance); } executorService.shutdown(); }}输出结果
可以看出,我们获取了 100 次实例,只创建了一个实例,从而实现了我们的单例模式。
感谢各位的阅读!关于"Java中单例模式怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
实例
方法
模式
对象
内存
内容
数据
数据库
方式
更多
篇文章
缓存
资源
静态
私有
不错
实用
频繁
不用
优点
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全稳定完善
深圳旅游软件开发联系方式
兴趣部落服务器连接不上
局域网内服务器装系统
命令行开启数据库服务器
国产数据库的现在和未来
绍兴工业软件开发是做什么的
网络安全现在比较多用的算法
进销软件开发
铁路网络安全工程师
深圳坪山plc软件开发
东莞市的网络安全情况
oracle连接数据库名
防火墙日志服务器
数据库毕业论文
北京上海杭州深圳互联网科技
中小企业网络安全
以互联网和科技促进均衡发展
因违反网络安全或侵犯
搜狗浏览器提示代理服务器
服务器中暑怎么办
网络安全责任分配的基本原则是什
穿越火线混乱服务器
数据库的变长和定长
专科读软件开发就业待遇怎么样
实训网络安全课总结报告
接口数据库和接口应用服务器
三级数据库技术全称
光遇小陈是什么服务器的
成都扫码支付软件开发公司