Java中悲观锁和乐观锁分别通过不同的方法来实现。
悲观锁通常通过synchronized关键字或者ReentrantLock类来实现。使用悲观锁时,线程获取锁之后会阻塞其他线程的访问,直到当前线程释放锁。悲观锁的实现方法如下:
- 使用synchronized关键字实现悲观锁:
synchronized (lockObject) { // 被保护的临界区 }
- 使用ReentrantLock类实现悲观锁:
ReentrantLock lock = new ReentrantLock(); lock.lock(); try { // 被保护的临界区 } finally { lock.unlock(); }
乐观锁通常通过CAS(Compare and Swap)操作或者版本号控制来实现。使用乐观锁时,线程不会阻塞,而是通过比较当前值和预期值的方式来判断是否可以进行更新操作。乐观锁的实现方法如下:
- 使用CAS操作实现乐观锁:
AtomicInteger value = https://www.yisu.com/ask/new AtomicInteger();>
- 使用版本号控制实现乐观锁:
class OptimisticLock { private int version = 0; private Object data; public synchronized boolean update(Object newData, int currentVersion) { if (currentVersion == version) { this.data = https://www.yisu.com/ask/newData;>