参考:
https://www.cnblogs.com/jyroy/p/11365935.html
https://www.jianshu.com/p/ae25eb3cfb5d
乐观锁和悲观锁
乐观锁和悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。
乐观锁:对于并发操作产生的线程安全问题持乐观态度,认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据,如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则执行其他操作,如报错或自动重试。乐观锁最常用的是CAS算法,java java.util.concurrent包下的原子类(例如AtomicBoolean
,AtomicInteger
,AtomicLong
)中的递增操作通过CAS自旋来实现。
悲观锁:它是对于并发操作时产生的线程安全持悲观心态,悲观锁认为竞争总会发生,因此每次对于某些进行操作时,都会持有一个独占的锁,像synchronied和lock的实现类都是悲观锁。
适用场景: