为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是 CAS,它有什么特性?
时间: 2023-12-24 18:01:45 浏览: 147
第16讲 synchronized底层如何实现?什么是锁的升级、降级?1
Synchronized 是一个悲观锁,因为它假设在任何时候都有可能发生并发冲突,所以会一直占用锁直到操作完成,这样会导致效率较低。而乐观锁则假设并发冲突不太可能发生,因此不会一直占用锁,而是在执行操作前检查是否有其他线程对数据进行了修改,如果没有就执行操作,如果有则重试。
乐观锁的实现原理一般有两种:一种是使用版本号机制,即在数据中增加一个版本号字段,每次操作时都会检查版本号是否一致,如果不一致则说明有其他线程修改了数据,操作失败,需要重试;另一种是使用CAS(Compare and Swap)操作,即先读取数据和版本号,然后尝试修改数据和版本号,如果版本号没有变化,则修改成功,否则说明有其他线程修改了数据,需要重试。
CAS(Compare and Swap)是一种原子操作,它能够在多线程环境下实现同步访问共享变量,避免了使用锁的开销。CAS操作包含三个参数:内存地址V、旧的预期值A、新的值B。如果当前内存地址V上存放的值与预期值A相等,则将内存地址V上的值修改为新的值B,否则不做任何操作。CAS的特性包括:原子性、不阻塞、无锁、无死锁。
阅读全文