java中的乐观锁悲观锁
时间: 2023-12-18 08:29:45 浏览: 95
Java中的乐观锁和悲观锁是并发控制中常用的两种机制,用于解决多线程并发访问共享资源时的数据一致性问题。
悲观锁(Pessimistic Locking)是一种悲观的并发控制策略,它假设在整个数据处理过程中,其他线程会不断地修改数据,因此在每次访问数据时都会加上锁,以保证数据的独占性,直到操作完成后才释放锁。Java中的synchronized关键字和ReentrantLock类就是悲观锁的实现方式。
乐观锁(Optimistic Locking)则是一种乐观的并发控制策略,它假设在整个数据处理过程中,其他线程不会修改数据,因此在每次访问数据时不会加锁,而是在更新数据时检查数据是否被其他线程修改过,如果没有则更新数据,否则放弃操作。Java中的CAS(Compare and Swap)操作就是乐观锁的实现方式。
以下是Java中使用悲观锁和乐观锁的示例代码:
1. 悲观锁示例代码:
```java
public class PessimisticLockDemo {
private int count = 0;
private final ReentrantLock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
}
```
2. 乐观锁示例代码:
```java
public class OptimisticLockDemo {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}
```
阅读全文