java怎么实现单例模式
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"java怎么实现单例模式",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么实现单例模式"吧!要点某个类只能有一个实例构造器
千家信息网最后更新 2025年12月01日java怎么实现单例模式
这篇文章主要讲解了"java怎么实现单例模式",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么实现单例模式"吧!
要点
某个类只能有一个实例
构造器私有化
它必须自行创建这个实例
含有一个该类的静态变量来保存这个唯一实例
必须自行先整个系统提供这个实例
对外提供获取该实例对象的方式
直接暴露
用静态变量的 get 方法获取
常见几种形式
饿汉式:直接创建对象不存在线程安全问题
直接实例化饿汉式(简洁直观)
枚举式(最简洁)
静态代码块饿汉式(适合复杂实例化)
懒汉式:延迟创建对象
线程不安全(适用于单线程)
线程安全(适用于多线程)
静态内部列形式(适用于多线程)
直接实例化对象,不管是否需要这个对象-饿汉式
/** 饿汉式*(1)构造器私有化*(2)自行创建,并用静态变量保存*(3)向外提供这个实例*(4)强调这是单例,用final修饰(这个变量只能赋值一次,之后不能修改)*/public class Singleton1 { public static final Singleton1 INSTANCE = new Singleton1(); private Singleton1 (){ }}枚举-jdk1.5之后-饿汉式
/**饿汉式*枚举类型:表示该类型的对象是有限的几个*我们可以限定为一个,就成了单例*/public enum Singleton2{ INSTANCE}静态代码块-饿汉式
/** 这种方式,适合那种需要从配置文件里面读一堆信息来实例化。*/public class Singleton3 { public static final Singleton3 INSTANCE; private String info; static { try { Properties pro = new Properties(); // 从位于src目录下的配置文件single.properties中读取信息 pro.load(Sinfleton3.class.getClassLoader().getResourceAsStream("single.properties")); INSTANCE = new Singleton3(pro.getPropertied("info")); }catch(IOExcepption e){ throw new RuntimeException(e); } } private Singleton3 (String info){ this.info = info; }}4.线程不安全(适合单线程)-懒汉式
/** 懒汉式*(1)构造器私有化*(2)静态变量保存*(3)提供一个静态方法,获取实例对象*/public class Singleton4 { private static Singleton4 instance; private Singleton4 (){ } public static Singleton4 getInstance(){ if(instance == null){ //加上Thread.sleep(100);多线程情况下 会实例化两个对象。 instance = new Singleton4(); } return instance; }}线程安全(适合多线程)-懒汉式
/** 懒汉式*(1)构造器私有化*(2)静态变量保存*(3)提供一个静态方法,获取实例对象*/public class Singleton5 { private static Singleton5 instance; private Singleton5 (){ } public static Singleton5 getInstance(){ if(instance == null){//先判断是否为空,再进行加锁。 synchronized(Singleton5.class){ //加上Thread.sleep(100);多线程情况下 会实例化两个对象。 instance = new Singleton5(); } } return instance; }}静态内部类形式
/** 再内部类被加载和初始化时,才创建INSTANCE实例对象* 静态内部类不会自动随着外部类的加载和初始化而初始化,它是要单独去加载和初始化的* 因为是在内部类加载和初始化是,创建的,因此是线程安全的。*/public class Singleton6 { private Singleton6 (){ } private static class Inner{ private static final Singleton6 INSTANCE = new Singleton6(); } public static Singleton6 getInstance(){ return Inner.INSTANCE; }}感谢各位的阅读,以上就是"java怎么实现单例模式"的内容了,经过本文的学习后,相信大家对java怎么实现单例模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
实例
线程
静态
对象
安全
变量
懒汉
模式
构造器
私有
形式
情况
方法
学习
简洁
两个
代码
信息
内容
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
正方教务管理系统服务器7
orcl数据库连接池
联想服务器虚拟化优化
华科网络安全学院大学生可以进吗
四种计算机网络技术主要学什么
上海个性化网络技术开发操作
网络服务器存在的三个问题
数据库创建函数
数据库中哪些属于依赖
购买服务器设备提高
dna数据库建设及其作用
互联网中国的根服务器
服务器配置
数据库技术的范式规则
使命召唤4连接服务器连不上
开服务器赚钱吗
美国国际网络安全政策中心主任
猫爪论坛网站代理服务器
红四方网络安全宣传周
猫鼠服务器下载失败是什么意思
网络安全宣传周上海地区主场
网鼎杯网络安全大赛第一名奖励
中国古代人物数据库
网络安全二维码解说
网络安全法规定不得从事非法入侵
数据库删除表中特定数值代码
叁陆玖网络技术有限公司
金山区专业软件开发销售方法
能源互联网 弘讯科技
苹果手机qq邮箱服务器