Java中单例模式怎么用
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章给大家分享的是有关Java中单例模式怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注意1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
湖南多功能软件开发厂家报价
加强网络安全的调研
3.bim软件开发
诺基亚网络安全提示怎么关闭
深圳企业网络安全公司排名
阜南职工网络安全知识
数据库减少表的行数
公安网络安全攻防
阿里云服务器可以预存资金吗
信息工程大学网络技术侦察
蜘蛛爬取导致服务器崩溃
手游梦幻西游安卓服务器
数据库结构设计说明书
潜山手机软件开发
湖南郴州安卓软件开发工资多少
转行软件开发要报培训班吗
小学生为网络安全代言
传奇3修改数据库后没效果
国家对软件开发行业的扶持
2018年网络安全发言稿
网络安全兴趣小组
未来服务器市场前景
在软件上建立下载服务器
2019年重庆网络安全周
深耕网络技术视频
vk为什么显示服务器错误
梦幻西游彩云之南服务器人多吗
在数据库检索结果中快速
马云的网络安全组长叫什么
条码数据库是什么数据库