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。

相关推荐
hh95011 小时前
Agent Plan x DeepSeek Harness:Agent 供应链安全与第三方插件审计
java·开发语言·安全·agent plan·adg成都社区·adg社区
吴声子夜歌11 小时前
Java面试——HBase原理及应用
java·面试·hbase
浪兎兎11 小时前
【Java Web】Servlet + JSP 笔记
java·前端·servlet
「QT(C++)开发工程师」11 小时前
C++ std::move 详解
开发语言·c++
matlab代码11 小时前
基于matlab的玉米种子计数设计(GUI界面)【源码58期】
开发语言·matlab
c#上位机11 小时前
C#上位机项目实战——C#的dll项目编译时拷贝到指定目录下
开发语言·c#
吴声子夜歌11 小时前
Java面试——ElasticSearch原理及应用
java·面试·es
Littlehero_12111 小时前
QT自定义控件之内嵌报表(4)(源码开源)
开发语言·qt
lhldsg11 小时前
家政派单系统开发实战:从需求分析到智能调度全流程指南
java·junit·小程序·uni-app·需求分析
吴声子夜歌11 小时前
Java面试——Spring原理及应用(一)
java·spring·面试