// 导入必要的包
import java.util.concurrent.atomic.AtomicInteger;
public class OptimisticLockExample {
// 使用AtomicInteger来模拟乐观锁的版本号控制
private AtomicInteger version = new AtomicInteger(0);
// 模拟数据库中的数据
private String data = "Initial Data";
// 更新数据的方法,包含乐观锁逻辑
public boolean updateData(String newData, int expectedVersion) {
// 获取当前版本号
int currentVersion = version.get();
// 检查传入的版本号是否与当前版本号一致
if (expectedVersion == currentVersion) {
// 如果一致,则更新数据并递增版本号
data = newData;
version.incrementAndGet();
System.out.println("Data updated successfully. New version: " + version.get());
return true;
} else {
// 如果不一致,则说明数据已经被其他线程修改过,更新失败
System.out.println("Update failed. Version mismatch. Current version: " + currentVersion);
return false;
}
}
// 获取数据和版本号的方法
public String getData() {
return "Data: " + data + ", Version: " + version.get();
}
public static void main(String[] args) {
OptimisticLockExample example = new OptimisticLockExample();
// 第一次更新,预期版本号为0
example.updateData("Updated Data 1", 0); // 输出: Data updated successfully. New version: 1
// 第二次更新,预期版本号仍为0,应该失败
example.updateData("Updated Data 2", 0); // 输出: Update failed. Version mismatch. Current version: 1
// 第三次更新,预期版本号为1,应该成功
example.updateData("Updated Data 3", 1); // 输出: Data updated successfully. New version: 2
// 打印最终的数据和版本号
System.out.println(example.getData()); // 输出: Data: Updated Data 3, Version: 2
}
}
这段代码展示了如何使用乐观锁机制来确保并发更新的安全性。
上一篇:java list转成单个泛型
下一篇:java 拆分字符串
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站