悲观锁:简单粗暴,性能一般。
认为线程安全一定会发生,在操作数据之前获取锁,确保线程串行执行。
Synchronized。Lock都属于悲观锁
乐观锁,性能较好。
认为线程安全问题不一定存在,因此不加锁。只是在更新数据时去判断有没有其他线程对数据做修改。
如果没有修改则认为是安全。
如果被其他线程修改,则可以重试或异常。
乐观锁关键:
版本号法:
CAS法:
乐观锁弊端:成功率太低