【Java面试场景题】怎么理解线程安全问题的?

今天分享一道2024年技术面试的场景题。

对线程安全问题的理解?

线程安全问题是指在多线程环境下,多个线程同时访问和修改共享资源时可能产生的数据不一致或者不可预期的结果。

具体表现为原子性、有序性、可见性这三种情况。

原子性呢,是指当一个线程执行一系列程序指令操作的时候,它应该是不可中断的,因为一旦出现中断,站在多线程的视角来看,这一系列的程序指令会出现前后执行结果不一致的问题。

可见性,就是说在多线程环境下,由于读和写是发生在不同的线程里面,有可能出现某个线程对共享变量的修改,对其他线程不是实时可见的。

有序性,指的是程序编写的指令顺序和最终CPU运行的指令顺序可能出现不一致的现象,这种现象也可以称为指令重排序,所以有序性也会导致可见性问题。

这三个问题该如何解决呢?

对于原子性问题,可以使用Synchronized同步锁、ReentrantLock重入锁、Atomic原子类等

可见性问题可以使用volatile关键字修饰

有序性问题可以使用volatile、final关键字

而Synchronized和Lock这种锁的机制是可以同时解决这三类问题的,因为它相当于把多线程并行执行的逻辑改成了串行执行,从根上杜绝了线程安全问题。

说一下见到过的使用volatile关键字的场景

  1. 在基于双重检查锁的单例模式中使用volatile不免生成不完整对象的问题
  2. AQS中的status状态标识
  3. ConcurrentHashMap中的Node数组、 在TreeBin中的控制状态变量

相信大家对今年的面试情况有了清晰的了解,刷八股文能找到工作的时代已经过去了。

如今的面试题更多考察的是对某个技术的深度思考和理解。

今天的分享就到这里,也欢迎大家在评论区留言你们遇到过的奇葩面试题。

我是Mic,感谢大家的关注和收藏,我们下期再见。

另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前总计超过80W字!还有Java进阶学习路线图和简历模板

【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

需要面试宝典、大厂面试文档的小伙伴可以扫描下方二维码
↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值