必看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 无锁自旋,高性能解决简单并发计数,比加锁更轻量。

相关推荐
峥嵘life4 小时前
Android 蓝牙设备连接广播详解-2026
android·python·学习
MusingByte6 小时前
别再裸用 Claude Code 了!安卓开发者必装 13 个官方推荐插件,效率翻 3 倍省 70% token
android
_李小白7 小时前
【android opencv学习笔记】Day 29: 滤波算法之Sobel 边缘检测
android·opencv·学习
Dxy12393102167 小时前
Python 操作 MySQL 事务:从入门到避坑
android·python·mysql
峥嵘life9 小时前
Android getprop 属性限制详解:User 版本属性获取问题分析
android·开发语言·python·学习
一航jason10 小时前
Speed Tools:一套低侵入的 Android 插件化 + 动态换肤 + 字体切换框架
android·插件化·组件化·换肤
李斯维11 小时前
Jetpack 可观察数据容器 LiveData 的入门与基础使用
android·android jetpack
问心无愧051311 小时前
ctf show web入门261
android·前端·笔记
alexhilton12 小时前
车载系统中的可扩展UI:从UI嵌入到系统窗口编排
android·kotlin·android jetpack
Cloud_Shy61812 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第一章 Item 4 - 6)
android·数据库·论文阅读·python