乐观锁机制

2021-05-11  本文已影响0人  任笙_8b8c
乐观锁实验 无锁情况(无争抢锁)
   /**
     *
     * @author   Sir.tang
        乐观锁成功
     * @return
     * @exception
     * @date    2021/5/10 10:30
     */
    @Test
    void contextLoad8( ) {

        User user = userMapper.selectById("1");
        user.setName("乐观锁测试");
        user.setAge(99);
        System.out.println(user.getVersion()); //读取数据库的 Version 未跟更新前
        int i = userMapper.updateById(user);

        //断言预期值与实际值符合不
        Assert.assertEquals(1, i);
        User user1 = userMapper.selectById("1");
        System.out.println(user1.getVersion());

    }
图片.png
多个线程操作同时对一个对象

多个线程操作同时对一个对象进行操作就会存在覆盖情况,如果没有乐观锁就会覆盖之前的值
但是 加上乐观锁第一个对象跟新成功 版本号会发生变化 Version+1 每次跟新都会将Version作为条件一起跟新后面的就不会成功

    /**
     *
     * @author   Sir.tang
     多线程实现乐观锁  数据跟新失败
     * @return
     * @exception
     * @date    2021/5/10 10:30
     */
    @Test
    void contextLoad10( ) {
        User user = userMapper.selectById("1");
        user.setName("乐观锁测试");
        user.setAge(666);
        System.out.println(user.getVersion());


        User user1 = userMapper.selectById("1");
        user.setName("乐观锁测试2");
        user.setAge(99333);

        int i = userMapper.updateById(user1);
        int i1 = userMapper.updateById(user);
        System.out.println(i);
        System.out.println(i1);

    }

图片.png
上一篇下一篇

猜你喜欢

热点阅读