lock什么情况下是悲观锁,可以举个例子吗
时间: 2023-08-19 15:04:53 浏览: 157
在多线程并发访问共享资源时,如果使用lock对资源进行加锁,那么它也可以是悲观锁的一种实现方式。悲观锁的思想是,在访问共享资源之前,先将其锁定,确保当前线程可以独占该资源,避免其他线程同时修改该资源而导致数据不一致的问题。
下面是一个使用Lock实现悲观锁的例子:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class PessimisticLockDemo {
private Lock lock = new ReentrantLock();
private int value = 0;
public void increment() {
try {
lock.lock();
value++;
} finally {
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
PessimisticLockDemo demo = new PessimisticLockDemo();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
demo.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
demo.increment();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Final value: " + demo.value);
}
}
```
在该例子中,我们使用Lock对共享资源进行加锁,在更新时直接对资源进行加锁,确保当前线程可以独占该资源,避免其他线程同时修改该资源而导致数据不一致的问题。这种方式就是一种悲观锁的实现方式。
阅读全文