java怎么实现单例模式
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要讲解了"java怎么实现单例模式",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么实现单例模式"吧!要点某个类只能有一个实例构造器
千家信息网最后更新 2025年02月04日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安全错误
数据库的锁怎样保障安全
数据库起不来报错文件系统只读
软件开发架构平台技术试题
深圳汇易网络技术有限公司
ln2服务器
t1飞跃版服务器数据转移
云服务器购买网页搭建
肇庆网络安全招聘
数据库库存管理的用法
2022网络安全发展趋势
软件开发项目技术总结报告
车载网络技术课后答案第三章
网络安全模式正常但打不开
网络安全体系结构的设计目标
新版国家网络安全战略
网络安全企业协会
mc服务器搭建网易版
本地出行叫车平台软件开发
深圳小一点软件开发公司
软件开发周期如何测算
西安电子科技大学网络安全博士
服务器怎样接收网关数据
广西网络技术分类创新服务
医院网络安全评估报告
迪普杯网络安全知识竞赛题
江苏回收报废服务器虚拟主机
企业生产管理数据库设计
车载网络技术课后答案第三章
辽宁网络安全产业园
戏曲化妆资源数据库建设
eol软件开发