1.基于数据库的乐观锁和乐观锁
有个版本字段,更新的时候先读进去,更新的时候作为where条件update。如果管制版本是状态不是单向的话还是有ABA的问题。单向的没问题。
乐观锁在查问的时候就把数据给锁住。
2.基于jdk的乐观锁和乐观锁
synchronized是乐观锁,这种线程一旦失去锁,其余须要锁的线程就挂起的状况就是乐观锁。
CAS操作的就是乐观锁,比拟并替换。每次不加锁而是假如没有抵触而去实现某项操作,如果因为抵触失败就重试,直到胜利为止。这种乐观锁的问题:ABA问题,如果始终再循环对cpu的开销比拟大。不能保障代码块的原子性 CAS机制所保障的只是一个变量的原子性操作,而不能保障整个代码块的原子性。