模型服务连接失败

如何实现乐观锁?什么是版本号机制和 CAS?

并发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 并发
Java 并发并发JavaJava 并发

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(并发).md

knowledge_note
Question 35: 如何实现乐观锁?什么是版本号机制和 CAS? Source answer: 乐观锁的实现通常使用版本号机制或者CAS,CAS相对较多。 所谓版本号机制,就是线程在对共享资源进行操作的时候,不需要加锁,只需要给共享资源加上一个版本号,在线程读取资源的时候记录下版本号,然后再写入的时候比较当前版本号和记录的版本号是否一致,一致则写入,并且版本号加一,不一致则重试。 CAS的思想和版本号机制类似,就是用一个预期值和当前值比较,一致则更新,否则重试。具体来说,CAS是一个原子操作,依赖于一条CPU原子指令,其涉及当前值、预期值和写入的新值。当线程读取资源时,记录下当前资源的值为预期值,并进行操作,在更新时,判断当前值和之前记录的预期值是否一致,一致则更新为新值,否则说明其他线程修改了该资源,重试。 sun.misc.Unsafe提供了compareAndSwapObject、compareAndSwapInt、compareAndSwapLong来实现对object、int、long的CAS操作。 Reviewed answer: 乐观锁常通过版本号机制或 CAS 实现。版本号机制是在更新时比对读取时记录的版本号,若一致则更新并递增版本;CAS 是比较当前值与预期值,相等则原子更新,否则重试。