Java面试时,线程为什么不安全?

作为一名资深程序员,以小编个人经验来看,在Java面试中,锁与并发编程是面试者的重灾区。不论是底层 synchronized 的原理,还是上层 JUC 包的使用,都是面试官喜欢重点深挖的领域。

线程为什么不安全?举个线程不安全的例子,讲解它的原理。

答:线程修改变量时,会将变量拷贝到本地内存,修改完成后,再写回主内存。这个过程中,如果多个线程同时访问并修改同一个数据,就会出现线程安全问题。

举个例子,主内存中的值为 0,线程 A 和线程 B 同时将这个值拷贝到本地内存。线程 A 对其 +1,线程 B 对其 -1。然后线程 A 将 1 写回主内存,线程 B 再将 -1 写回主内存。这时就出现了问题。对一个数据 +1 -1 之后得到的结果竟不是 0,而是 -1。

类似地,如果 B 线程先将 -1 写回主内存,A 线程再将 1 写回主内存。这时就可能得出错误结果 1。但大多数情况下不会出问题,只要一个线程操作完之后,第二个线程再进行操作。就能得出正确的结果 0。

相关推荐
jimy111 分钟前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
captain37621 分钟前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
呆呆虫1231 分钟前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心中有你021442 分钟前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
心疼你的一切1 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
步行cgn1 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
每天进步一点点km2 小时前
自用-牛客网-华为机试编程模拟题1-python
华为od·华为·面试
lgcgkCQ2 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog2 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老2 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring