Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java 乐观锁

作者:◆丶依然如风   发布日期:2025-08-15   浏览:93

// 导入必要的包
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
    }
}

解释说明:

  • 乐观锁:在并发场景中,乐观锁假设冲突很少发生,因此不会对资源加锁。它通过检查数据在更新时是否被其他线程修改过,来决定是否允许更新。如果数据未被修改,则更新成功;否则更新失败。
  • AtomicInteger:用于实现版本号的原子操作,确保多线程环境下的线程安全。
  • updateData 方法:该方法接收新的数据和预期的版本号。只有当预期版本号与当前版本号一致时,才会更新数据并递增版本号;否则更新失败。
  • getData 方法:用于获取当前的数据和版本号。

这段代码展示了如何使用乐观锁机制来确保并发更新的安全性。

上一篇:java list转成单个泛型

下一篇:java 拆分字符串

大家都在看

java连接数据库的代码

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java实体类转json字符串

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站