乐观摇滚
乐观锁是一种乐观思想,认为读多写少,遇到同时写入的可能性低,每次去取数据时别人都不修改所以不锁,更新时判断在此期间别人是否去更新了这个数据,开始写的时候把现在的版本号失败时重复阅读-比较-书写。
Java的乐观锁定基本上通过CAS操作实现。 CAS是更新的原子操作,比较当前值和接收值是否相同,如果相同则更新,否则失败。
悲观摇滚
悲观的上锁是一种悲观的思想,认为写入较多,同时写入的可能性较高,因为每次去获取数据时都会被他人修改,所以每次读写数据时都会上锁,在他人试图读写该数据时就会封锁,直到取得上锁为止
Java的悲观锁是同步的,AQS框架下的锁尝试cas乐观锁以获得锁,如果无法获得,则转换为悲观锁,如RetreenLock。