并发JavaJava 并发锁
- 分类
- Java 并发
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/28 21:25
答案
乐观锁的实现通常使用版本号机制或者CAS,CAS相对较多。 所谓版本号机制,就是线程在对共享资源进行操作的时候,不需要加锁,只需要给共享资源加上一个版本号,在线程读取资源的时候记录下版本号,然后再写入的时候比较当前版本号和记录的版本号是否一致,一致则写入,并且版本号加一,不一致则重试。 CAS的思想和版本号机制类似,就是用一个预期值和当前值比较,一致则更新,否则重试。具体来说,CAS是一个原子操作,依赖于一条CPU原子指令,其涉及当前值、预期值和写入的新值。当线程读取资源时,记录下当前资源的值为预期值,并进行操作,在更新时,判断当前值和之前记录的预期值是否一致,一致则更新为新值,否则说明其他线程修改了该资源,重试。 sun.misc.Unsafe提供了compareAndSwapObject、compareAndSwapInt、compareAndSwapLong来实现对object、int、long的CAS操作。
相关题目(5)
Java 并发并发JavaJava 并发锁
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
有哪些支持并发的集合?共源 1
Java 并发并发JavaJava 并发
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(并发).md
knowledge_noteQuestion 35: 如何实现乐观锁?什么是版本号机制和 CAS?
Source answer: 乐观锁的实现通常使用版本号机制或者CAS,CAS相对较多。 所谓版本号机制,就是线程在对共享资源进行操作的时候,不需要加锁,只需要给共享资源加上一个版本号,在线程读取资源的时候记录下版本号,然后再写入的时候比较当前版本号和记录的版本号是否一致,一致则写入,并且版本号加一,不一致则重试。 CAS的思想和版本号机制类似,就是用一个预期值和当前值比较,一致则更新,否则重试。具体来说,CAS是一个原子操作,依赖于一条CPU原子指令,其涉及当前值、预期值和写入的新值。当线程读取资源时,记录下当前资源的值为预期值,并进行操作,在更新时,判断当前值和之前记录的预期值是否一致,一致则更新为新值,否则说明其他线程修改了该资源,重试。 sun.misc.Unsafe提供了compareAndSwapObject、compareAndSwapInt、compareAndSwapLong来实现对object、int、long的CAS操作。
Reviewed answer: 乐观锁常通过版本号机制或 CAS 实现。版本号机制是在更新时比对读取时记录的版本号,若一致则更新并递增版本;CAS 是比较当前值与预期值,相等则原子更新,否则重试。