网易首页 > 网易号 > 正文 申请入驻

【081期】面试官问:Spring 创建好的单例对象存在线程安全问题吗?

0
分享至

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方留言必回,有问必答!

每天08:00更新文章,每天进步一点点...

前言

这是我在一次面试中被问到过的问题,但是当时我回答的并不是太好,最近在学习多线程知识的时候又对这个问题有了新的理解,所以这篇文章主要讲解下我对个问题的理解。

正文 一、理解这个问题前,你需要先知道几个知识点

1.spring的bean作用域都有哪些?默认是哪个?

默认的是:单例 singleton

2.创建单例的方式是否线程安全与使用已经创建好的单例对象是否线程安全是两个问题

①常见创建单例的方式懒汉式和饿汉式

懒汉式(不安全写法)

public class Singleton{
private Singleton(){}
private static Singleton singleton = null; //不建立对象
public static Singleton getInstance(){
if(singleton == null) { //先判断是否为空
singleton = new Singleton (); //懒汉式做法
return singleton ;

饿汉式

public class Singleton{
public Singleton(){}
private static Singleton singleton = new Singleton(); //建立对象
public static Singleton getInstance(){
return singleton ;//直接返回单例对象 }}

懒汉式(安全写法)

public class Singleton{
private Singleton(){}
private static Singleton singleton = null; //不建立对象
public static synchronized Singleton getInstance(){
if(singleton == null) { //先判断是否为空
singleton = new Singleton (); //懒汉式做法
return singleton ;

②在spring的框架里,对象是交给spring容器创建的,spring的创建单例的方式既不是懒汉式也不是饿汉式,是单例注册表模式实现单例模式的,感兴趣的可以看这篇文章:https://blog.csdn.net/u012794505/article/details/80926823,这种创建单例模式的方式是线程安全的。

③怎么判断使用已经创建好的单例对象是否线程安全

  • 看这个单例里有没有全局变量(全局变量就是成员变量,成员变量又分实例变量和静态变量)

  • 如果有全局变量,看它是不是只可以读取而不能写入(有没有发布set方法)

如果满足上面两个条件,那么这个单例就是不安全的。

二、spring的单例模式与线程安全

2.其实spring的源码里比如RequestContextHolderTransactionSynchronizationManagerLoxaleContextHolder等这些对象创建方式也是单例,底层就是用ThreadLocal处理的。ThreadLocal基本实现思路是:它会为每个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突,因为每个线程都拥有自己的变量副本,从而也就没必要对该变量进行同步啦。

3.在ssh或ssm框架里的service或dao对象虽然也是单例模式,但正如上面分析的,他们没有可修改的全局变量,所以在多线程环境下也是安全的。

4.其实在很多文章中对于spring的单例模式与线程安全会提到一个概念有状态对象和无状态对象,无状态对象在多线程环境下是线程安全的,有状态的对象则不是,其实这个字面的意思是比较对的,因为这个对象如果无法存储数据,也就不会出现多个线程操作共享数据的情况,自然安全,概念如下

有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。公众号Java精选,回复Java面试,免费在线刷题。

无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。

但是很多文章举的无状态对象的例子我认为不合理。比如:https://blog.csdn.net/bingjing12345/article/details/9794945,因为如果这个对象没有set放方法只是可读,其实也是安全的。

public class StatefulBean {

public int state;
// 由于多线程环境下,user是引用对象,是非线程安全的
public User user;

public int getState() {
return state;
}

public void setState(int state) {
this.state = state;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}
}
总结

其实你越去了解框架底层的实现原理,你越会为这个框架的思想而着迷,你会感慨框架笔者的想法是多么的奇妙,多么的周全,多一字嫌多,少一字嫌少。

作者:开心的码字达 blog.csdn.net/jdk_wangtaida/article/details/88738228

期往精选 点击标题可跳转

- 小程序,3000+ 道面试题在线刷,最新、最全 Java 面试题!

文章有帮助的话,在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
多家公司被倒查补税!税务总局回应来了!对企业有什么影响?

多家公司被倒查补税!税务总局回应来了!对企业有什么影响?

学税
2024-06-19 08:25:31
复旦教授称95%的数学专业学生写不出姜萍那样的答卷,校方回应“她考621分为何上了中专”

复旦教授称95%的数学专业学生写不出姜萍那样的答卷,校方回应“她考621分为何上了中专”

极目新闻
2024-06-17 10:50:44
阿斯:皇马拥有先进面罩技术&担忧姆巴佩,但他们现在无权介入

阿斯:皇马拥有先进面罩技术&担忧姆巴佩,但他们现在无权介入

直播吧
2024-06-19 13:49:13
“超级顶流”马斯克在戛纳回应“go f**k yourself”

“超级顶流”马斯克在戛纳回应“go f**k yourself”

经济观察报
2024-06-19 21:09:18
要大结局了?仁爱礁菲舰出现6米大裂缝,坐滩人员已中断补给25天

要大结局了?仁爱礁菲舰出现6米大裂缝,坐滩人员已中断补给25天

胖福的小木屋
2024-06-17 23:57:30
不是生活打败了你,是贪官与特权阶层剥夺了属于你的机会!

不是生活打败了你,是贪官与特权阶层剥夺了属于你的机会!

新时代的两性情感
2024-06-13 13:47:17
最强杀猪盘,睡遍欧美,财色全骗,靠的就是一张脸

最强杀猪盘,睡遍欧美,财色全骗,靠的就是一张脸

奇闻故事会
2023-08-18 14:20:12
一对情侣与领导吃烧烤,领导把男方灌醉,与女方去厕所偷偷接吻

一对情侣与领导吃烧烤,领导把男方灌醉,与女方去厕所偷偷接吻

一个岛岛
2024-06-18 22:52:05
台知名学者:大陆已跟俄美平起平坐,但不会轻易攻台,原因很简单

台知名学者:大陆已跟俄美平起平坐,但不会轻易攻台,原因很简单

千里持剑
2024-06-19 07:12:30
欧洲杯乱套了:弱旅3-1爆冷登顶,葡萄牙2-1逆转绝杀,C罗创历史

欧洲杯乱套了:弱旅3-1爆冷登顶,葡萄牙2-1逆转绝杀,C罗创历史

侃球熊弟
2024-06-19 05:03:45
破防了,几年前的就业环境和现在的对比有多鲜明

破防了,几年前的就业环境和现在的对比有多鲜明

朗威谈星座
2024-06-17 21:15:01
卸任7年的“老虎”洪礼和被查,上月底曾公开露面

卸任7年的“老虎”洪礼和被查,上月底曾公开露面

政知新媒体
2024-06-19 15:37:58
记者扮男客潜入采耳店,偷拍服务全过程:女技师、柔式按摩别有洞天

记者扮男客潜入采耳店,偷拍服务全过程:女技师、柔式按摩别有洞天

古今档案
2024-05-07 13:04:58
格瓦迪奥尔半场全队最低分,多项防守数据空白

格瓦迪奥尔半场全队最低分,多项防守数据空白

懂球帝
2024-06-19 22:10:14
中S被麻六记拒绝!隔壁店老板娘拉中S去吃毛血旺并免单,偷感好强

中S被麻六记拒绝!隔壁店老板娘拉中S去吃毛血旺并免单,偷感好强

西瓜爱娱娱
2024-06-19 16:55:58
普京出访朝鲜之际,北约新秘书长出炉,她出任俄副防长!

普京出访朝鲜之际,北约新秘书长出炉,她出任俄副防长!

新民晚报
2024-06-19 14:45:54
明日夏至,老传统吃面,牢记:1要放,2不吃,3讲究,不懂别乱吃

明日夏至,老传统吃面,牢记:1要放,2不吃,3讲究,不懂别乱吃

小茉莉美食记
2024-06-20 00:08:13
向佐为2岁儿子庆生并道歉,自曝与儿子初次见面时,向笙已7个月大

向佐为2岁儿子庆生并道歉,自曝与儿子初次见面时,向笙已7个月大

娱絮
2024-06-18 21:07:07
湖南一男子坐车时意外发现,6年前弟弟杀人案的死者依然活着

湖南一男子坐车时意外发现,6年前弟弟杀人案的死者依然活着

一个人讲故事
2024-04-23 20:17:39
不到20天连打5虎,中纪委官网评:反腐败形势依然严峻复杂

不到20天连打5虎,中纪委官网评:反腐败形势依然严峻复杂

南方都市报
2024-06-19 18:15:07
2024-06-20 07:16:49
Java精选
Java精选
一场永远也演不完的戏
1551文章数 3855关注度
往期回顾 全部

科技要闻

618观察:谁为高强度的低价竞争买单?

头条要闻

欧洲杯:苏格兰1-1瑞士 沙奇里无解世界波

头条要闻

欧洲杯:苏格兰1-1瑞士 沙奇里无解世界波

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

深化科创板改革 证监会发布八条措施

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

健康
游戏
手机
教育
艺术

晚餐不吃or吃七分饱,哪种更减肥?

《艾尔登法环:黄金树幽影》是M站评分最高的DLC

手机要闻

Android 15将重新定义“快速充电”标准:从7.5W提高到20W

教育要闻

你好高校 | 对话北京航空航天大学

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

无障碍浏览 进入关怀版