何为乐观锁
每次都假如最坏的状况,每次拿数据都认为他人会批改,所以每次在拿数据时都会进行加锁操作。Java 中 synchronized 和 ReentrantLock 等独占锁就是乐观锁思维的实现。
何为乐观锁
每次都假如最好的状况,每次拿数据都认为他人不会批改,所以每次在拿数据时都不会上锁,但如果进行更新操作,便会 判断其他人是否在此期间曾经进行过更新的操作 ,能够应用版本号和 CAS 算法(Compare And Swap,比拟与替换算法) 来实现。
两种锁的应用场景
乐观锁多应用于多写的场景下
乐观锁多应用于多读的场景下
两种锁的代码实现
乐观锁实现计数器
应用 synchronized 实现:
public class Counter{
private int count;
public synchronized int count(){return ++count;}
}
应用 Lock 实现:
public class Counter{
private int count;
private Lock lock = new ReetrantLock();
public int count(){lock.lock();
try{return ++count;}finally{lock.unlock();
}
}
}
乐观锁实现计数器
public class Counter{private AtomicInteger ai = new AtomicInteger();
public int count(){return ai.incrementAndGet(); //AtomicInteger 类应用到了 CAS 算法
}
}