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。

相关推荐
极客先躯17 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
老迟到的茉莉18 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python
学逆向的18 小时前
汇编——内存
开发语言·汇编·算法·网络安全
tachibana218 小时前
hot100 翻转二叉树(226)
java·数据结构·算法·leetcode
brave_zhao18 小时前
nginx的进程架构
java·学习·nginx
兰令水18 小时前
leecodecode【面试150】【2026.7.9打卡-java版本】
java·数据结构·leetcode·面试·职场和发展
禾高网络18 小时前
互联网医院|AI 互联网医院成品开发系统
java·大数据·人工智能·小程序
shepherd11118 小时前
一次把 Spring MVC 文件上传参数“查没了”的排查:multipart、Filter 与 request body 的连环坑
java·spring boot·后端
lbb 小魔仙18 小时前
MuMu 模拟器 6.0 硬核测评:这次升级确实不一样
java·开发语言·模拟器·mumu·硬核测评
前端炒粉18 小时前
手写promise
java·前端·javascript