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。

相关推荐
Rust研习社2 小时前
Rust Clone 特征保姆级解读:显式复制到底怎么用?
开发语言·后端·rust
Albert Edison2 小时前
【RabbitMQ】七种工作模式
java·开发语言·分布式·rabbitmq
小旭95272 小时前
SpringBoot 项目实战:ECharts 数据可视化 + POI Excel 报表导出完整版教程
java·spring boot·后端·信息可视化·echarts
咸鱼翻身小阿橙2 小时前
QT总结-P2
开发语言·qt
We་ct2 小时前
JS手撕:手写Koa中间件与Promise核心特性
开发语言·前端·javascript·中间件·node.js·koa·co
程序员老邢2 小时前
【技术底稿 13】内网 Milvus 2.3.0 向量数据库全流程部署(商助慧 AI 底座,Attu 可视化)
java·数据库·人工智能·ai·语言模型·milvus
YXWik62 小时前
Langchain4j(5)RAG之多格式文档加载(PDF / Word / TXT / 批量文件夹)
java
Seven972 小时前
【从0到1构建一个ClaudeAgent】内存管理-上下文压缩
java
码云数智-园园2 小时前
HTML5 核心特性解析:告别旧时代痛点,重塑现代 Web 体验
开发语言