必看6

精通 volatile、synchronized、Atomic 原子类适用场景、可见性与原子性问题;

一、基础概念

1、什么是可见性、原子性、有序性?

答案

  • 可见性:一个线程改了变量,其他线程能立刻看到最新值。
  • 原子性 :一个操作不可拆分,要么全部执行完,要么不执行。
  • 有序性:防止 CPU 指令重排,代码按编写顺序执行。

2、volatile 能保证什么?不能保证什么?

答案

✅ 保证:可见性、有序性(禁止指令重排)

❌ 不保证:原子性 适合做状态标记,不适合做计数、i++ 这种复合操作。

二、volatile 相关面试题

3、volatile 原理

答案

底层内存屏障 + CPU 缓存一致性协议;

强制修改立刻刷回主内存 ,其他线程强制从主内存读取,不走工作缓存,保证可见性;同时禁止指令重排。

4、volatile 适用场景

答案

  1. 一写多读:一个线程修改,多个线程只读取。
  2. 布尔状态位、开关标记、全局控制标识。
  3. 双重校验锁 DCL 单例(防止指令重排)。

5、为什么 volatile 不能保证 i++?

答案

i++ 是三步复合操作:取值 → 加 1 → 赋值

volatile 只能保证每次拿到最新值,但三步不能打包原子执行,多线程会覆盖丢失,结果不准。

三、synchronized 相关

6、synchronized 作用

答案

同时保证:可见性 + 原子性 + 有序性独占锁,同一时间只能一个线程进入,既能锁方法也能锁代码块。

7、synchronized 锁的是什么?

答案

  • 修饰普通方法:锁 当前对象 this
  • 修饰静态方法:锁 类的 Class 对象
  • 修饰代码块:锁 括号里的任意对象

8、synchronized 和 volatile 区别

答案

  1. volatile 只做标记 ,不阻塞;synchronized 是排他锁,会阻塞
  2. volatile 无原子性;synchronized 有原子性。
  3. volatile 轻量、开销小;synchronized 重量级、开销大。

四、Atomic 原子类

9、Atomic 原子类是什么?常用有哪些?

答案

基于 CAS 无锁 实现线程安全;

常用:AtomicInteger、AtomicBoolean、AtomicLong、AtomicReference

10、CAS 原理

答案

比较并交换:拿内存旧值当前预期值 对比;

相等说明没被别人修改,就更新新值

不相等就重试,直到成功。

11、Atomic 为什么比 synchronized 快?

答案

Atomic 是 CAS 无锁自旋,不阻塞线程;

synchronized 是重量级互斥锁,会阻塞、挂起线程,开销更大。

12、Atomic 适用场景

答案

多线程高频计数、自增自减、标记位

不想用重量级锁,追求高并发高性能场景。

五、三者选型对比(面试必背)

13、怎么选?

答案

  1. 只是状态标记、一写多读 → 用 volatile
  2. 简单计数、i++ 并发自增 → 用 Atomic 原子类
  3. 复合业务逻辑、多行代码要整体互斥 → 用 synchronized

六、极简一句话总结

1、volatile 保证可见性和有序性、不保证原子性,适合状态标识;

2、synchronized 全能保证可见性原子性有序性,悲观互斥锁;

3、Atomic 基于 CAS 无锁自旋,高性能解决简单并发计数,比加锁更轻量。

相关推荐
心中有国也有家15 小时前
AtomGit Flutter 鸿蒙客户端:ModalBottomSheet 实战
android·javascript·学习·flutter·华为·harmonyos
YSoup17 小时前
Android Stuidio中下载TRAE插件依赖的JCEF后打不开
android
2401_8949155317 小时前
Geo搜索优化排名源码部署搭建全流程详解
android·开发语言·flask·php·精选
星释18 小时前
鸿蒙智能体开发实战:34.鸿蒙壁纸大师 - 提示词工程与优化
android·华为·harmonyos·鸿蒙
blanks202019 小时前
android 编译问题记录
android
bobuddy20 小时前
平台总线(platform bus)
android
plainGeekDev20 小时前
libs 目录 → Gradle 依赖管理
android·java·kotlin
帅次21 小时前
Android 高级工程师面试:Flutter Widget 体系 近1年高频追问 20 题
android·flutter·面试·element·widget·setstate·renderobject
帅次21 小时前
Android 高级工程师面试:Jetpack 核心 近1年高频追问 20 题
android·面试·协程·jetpack·stateflow·lifecycle
爱笑鱼1 天前
Handler(四):Handler 卡顿怎么定位?从 Slow delivery 到 Slow dispatch
android