写一下一段乐观锁的代码
时间: 2023-12-01 18:24:29 浏览: 72
好的,以下是一段使用乐观锁的 Java 代码示例,用于在多线程环境下对一个共享资源进行操作:
```java
public class OptimisticLockExample {
private int counter = 0;
private AtomicInteger version = new AtomicInteger(0);
public void incrementCounter() {
int currentVersion = version.get();
while (true) {
if (version.compareAndSet(currentVersion, currentVersion + 1)) {
counter++;
break;
} else {
currentVersion = version.get();
}
}
}
public int getCounter() {
return counter;
}
}
```
这段代码中,counter 是一个共享资源,多个线程可以同时对它进行操作。为了避免竞态条件的发生,我们使用了乐观锁的思想,即每次对 counter 进行操作时,都会先获取 version 的值,并且通过 compareAndSet 方法进行比较和更新。如果更新成功,则说明当前线程拿到了最新的版本号,可以安全地对 counter 进行操作;否则,说明当前线程的版本号已经过期,需要重新获取最新版本的值并重试。
需要注意的是,乐观锁的实现需要保证对共享资源的操作是无状态的,即不依赖于之前的操作结果。否则,如果多个线程对同一个共享资源进行依赖性操作时,就会出现竞态条件,乐观锁就无法保证数据的一致性和正确性。
阅读全文