乐观锁实验 无锁情况(无争抢锁)
/**
*
* @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
网友评论