单例模式的多线程
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,单例模式的原理:保证一个类有一个实例,并且提供一个全局的访问点(内存地址唯一)实现方式:1、饱汉模式: 1: publicclass Singleton{ 2: 3: private
千家信息网最后更新 2025年01月25日单例模式的多线程
单例模式的原理:保证一个类有一个实例,并且提供一个全局的访问点(内存地址唯一)
实现方式:
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安全错误
数据库的锁怎样保障安全
大学生网络安全危险
不知道用哪个软件开发游戏
hp服务器维保
手机邮箱添加无法连接服务器
互讯网络技术有限公司
计算机网络技术就业方向范文
阿里巴巴学生认证服务器
网络安全标语漫画
计算机网络技术选科
数据库是一个字段多个筛选的命令
烈熊网络技术
无线网络摄像头连接服务器失败
数据库与实际使用区别
我的世界中二服务器
网络异常无法连接数据库服务器
易语言财经数据库
2kol2几个服务器
星乾网络安全公司
数据库视图导出为表
合同管理软件服务器
服务器 安全配置
有效的网络安全等保
大学生如何增强网络安全意识作文
瑞婷网络技术合肥地址
德邦软件开发工资
推送服务器架构
智能网联和软件开发
cmd怎么添加mysql数据库
u8管理服务器在那
新乡市紫城网络技术有限公司