乐观锁与悲观锁

迷人的老约翰 2021-06-24 15:01:40 18559 0 0 0

乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,
再次更新值测试
悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作

乐观锁实现方式
给表加一个version字段,
在进行更新操作的时候,先查询version的数值,如果与version不符合,则执行失败
** set version = newVersion where version = oldVersion**

  • 设计数据库增加version字段,默认版本为1
    图片alt

  • 实体类加对应字段

图片alt


  • 配置config类

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    return new OptimisticLockerInterceptor();
    }


  • 模拟乐观锁

    void testVersion(){
    //线程1
    User user = userMapper.selectById(1407235863996809217L);
    user.setName(“啸牛马”);
    user.setAge(18);

    //线程2----> 线程2实现了插队的操作
    User user1 = userMapper.selectById(1407235863996809217L);
    user1.setName("小牛");
    user1.setAge(20);
    userMapper.updateById(user1);
    
    
    //执行线程1的操作则会覆盖线程2的修改
    userMapper.updateById(user);
    

    }

图片alt

悲观锁

无论对数据库执行什么操作都上锁,当一个事务访问数据库的时候,其余事务都在等待,