文章目录
乐观锁 / 悲观锁
概念
乐观锁、悲观锁不是一种锁的具体实现,而是两种不同的思想。
乐观锁:认为每次去拿数据的时候,别人都不会修改这个数据,(即认为数据一般不会产生冲突),所以不会对数据上锁,只是当对数据进行修改时,才会对数据检测是否冲突,如果发生冲突,返回给用户错误信息,由用户自己决定如何做。
悲观锁:总是假设总坏的情况,认为每次去拿数据时,这个数据都会被别人改变,所以在每次拿数据的时候,都会加锁,这样如果有另一个线程来拿这个数据的时候就会阻塞,直到当前线程释放锁。
乐观锁的实现:CAS(Compare and Swap)操作
CAS是乐观锁的技术实现,当多个线程尝试使用CAS同时来更新同一个变量时,只有一个线程能够更新变量的值,而其他线程都会更新失败,但是失败的线程并不会阻塞,而是被告知这次竞争失败,可以再去尝试竞争。
CAS操作包含3个操作数:
① V:内存位置。
② A: 需要比较的预期原值。
③ B: 拟写入的新值。
解释一下