网站首页 > java教程 正文
今天分享一道2024年技术面试的场景题。
对线程安全问题的理解?
线程安全问题是指在多线程环境下,多个线程同时访问和修改共享资源时可能产生的数据不一致或者不可预期的结果。
具体表现为原子性、有序性、可见性这三种情况。
原子性呢,是指当一个线程执行一系列程序指令操作的时候,它应该是不可中断的,因为一旦出现中断,站在多线程的视角来看,这一系列的程序指令会出现前后执行结果不一致的问题。
可见性,就是说在多线程环境下,由于读和写是发生在不同的线程里面,有可能出现某个线程对共享变量的修改,对其他线程不是实时可见的。
有序性,指的是程序编写的指令顺序和最终CPU运行的指令顺序可能出现不一致的现象,这种现象也可以称为指令重排序,所以有序性也会导致可见性问题。
这三个问题该如何解决呢?
对于原子性问题,可以使用Synchronized同步锁、ReentrantLock重入锁、Atomic原子类等
可见性问题可以使用volatile关键字修饰
有序性问题可以使用volatile、final关键字
而Synchronized和Lock这种锁的机制是可以同时解决这三类问题的,因为它相当于把多线程并行执行的逻辑改成了串行执行,从根上杜绝了线程安全问题。
说一下见到过的使用volatile关键字的场景
- 在基于双重检查锁的单例模式中使用volatile不免生成不完整对象的问题
- AQS中的status状态标识
- ConcurrentHashMap中的Node数组、 在TreeBin中的控制状态变量
相信大家对今年的面试情况有了清晰的了解,刷八股文能找到工作的时代已经过去了。
如今的面试题更多考察的是对某个技术的深度思考和理解。
今天的分享就到这里,也欢迎大家在评论区留言你们遇到过的奇葩面试题。
我是Mic,感谢大家的关注和收藏,我们下期再见。
需要高手面试文档合集(附赠大厂内部面试文档)或者有不懂的技术面试题想咨询的小伙伴可以关注公众号【Mic聊架构】回复暗号【999】。
猜你喜欢
- 2025-03-19 面试官:使用int类型做加减操作,是线程安全吗
- 2025-03-19 Redis多线程版本是如何保证线程安全的?
- 2025-03-19 JAVA多线程编程-线程安全性AtomicInteger原子操作
- 2025-03-19 C# 并发请求中的线程安全问题(c#多线程编程实战与c#并发编程经典实例)
- 2025-03-19 为什么i++用volatile是存在线程安全问题的?
- 2025-03-19 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?
- 2025-03-19 java线程并发安全专题-java线程的生命周期
- 2025-03-19 为什么?为什么StringBuilder是线程不安全的?
- 2025-03-19 面试突击18:为什么ConcurrentHashMap是线程安全的?
- 2025-03-19 为什么 HashMap 是线程不安全的(为什么hashmap是线程不安全的)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)