单例模式的多线程
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,单例模式的原理:保证一个类有一个实例,并且提供一个全局的访问点(内存地址唯一)实现方式:1、饱汉模式: 1: publicclass Singleton{ 2: 3: private
千家信息网最后更新 2025年12月02日单例模式的多线程
单例模式的原理:保证一个类有一个实例,并且提供一个全局的访问点(内存地址唯一)
实现方式:
1、饱汉模式:
1: publicclass Singleton{ 2: 3: privatestatic Singleton s = null; 4: 5: private Singleton(){ 6: 7: } 8: 9: publicstatic Singleton getInstance(){ 10: 11: if(s ==null){ 12: s = new Singleton(); 13: } 14: return s; 15: } 16: }2、饿汉模式
1: publicclass Singleton{ 2: privatestatic Singleton s = new Singleton(); 3: private Sinleton(){} 4: publicstatic Singleton getInstance(){ 5: return s; 6: } 7: }单例模式的线程安全问题:
1、通过synchronized关键字来实现
1: publicclass Single 2: { 3: privatestatic Single single ; 4: private Single(){ 5: } 6: publicstaticsynchronized Single getInstance(){ 7: if(single == null){ 8: single = new Single(); 9: } 10: return single; 11: } 12: }这样的话可以强制在程序运行过程中只有一个线程调用该方法获得该类的一个实例,但是缺点也是如此:只有在第一次使用该对象时需要同步,再次
获取该对象时就不需要再同步了,这时候的同步就变的多余了。
2、其实饿汉模式就是改善多线程的一种有效手段,这样JVM保证任何线程访问单例对象时,一定先创建该实例,代码同上
3、另外一种改善多线程的方式
1: publicclass Singleton { 2: 3: privatevolatilestatic Singleton uniqueInstance; 4: 5: private Singleton() {} 6: 7: publicstatic Singleton getInstance() { 8: if(uniqueInstance == null) { //(1) 9: //只有第一次才彻底执行这里的代码 10: synchronized() { 11: //再检查一次 12: if(uniqueInstance == null) 13: uniqueInstance = new Singleton(); 14: } 15: } 16: return uniqueInstance; 17: } 18: }在最开始如果有1、2、3个线程走到了(1)处,假设1进入了同步块,2、3等待。1实例化后,2进入同步块,发现uniqueInstance已经不为空,跳出同步块。接着3进入,又跳出同步块。
volatile关键字确保:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地uniqueInstance变量。如果性能是你关心的重点,那么这个做法可以帮你大大地减少getInstance()的时间耗费。
线程
同步
模式
实例
只有
对象
代码
关键
关键字
变量
方式
第一次
保证
有效
安全
这样的话
做法
全局
内存
再次
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
负责软件开发的叫什么
安装的数据库版本与软件不兼容
贵州乐迅网络技术
深圳软件开发app
河南放心软件开发服务参考价格
金融信用基础数据库由
动易 数据库安装
服务器网络连接是什么意思
旋转手抄报网络安全
增城可靠网络安全服务
新一代网络技术分类标准
tp如何获取数据库版本
数据库文件可以有多个吗
济宁睿付网络技术公司
汽车车载网络技术视频
湖南数据库安全箱出厂价格
现金股利数据锐思数据库
数据中心服务器性能分析
区块链技术网络安全架构
服务器运维怎么学习
DW2019有没有数据库
武汉软件开发培训怎么样
跨境互联网科技未来行业发展
学生信息管理系统数据库建模
增城可靠网络安全服务
linux软件开发基础
省两会网络安全
北京天地君合网络技术公司
b2b2c数据库设计
网络安全主要关注重点