《@Version 乐观锁安全线程(第二篇)》

什么是乐观锁

乐观锁顾名思义:他表示的就是乐观,面对任何事情都用积极乐观的心态去处理,首先她回认为你是安全的,然后去执行,如果当他发现不正确,那么他会立刻返回错误信息,嘿嘿

@Version

@version是什么

@version他是用于版本控制的,一般是hibernate的jpa使用,每当数据更新的时候,数据库中的@version就会更新状态,自增加一

@version如何使用

@version.正因为@version有这样的功能,所以我们高并发的,可以根据@version的版本号来查看是否是我们需要的版本,来避免高并发的时候出现脏读,如果@version发现数据不一致的时候他就会抛出一个错误码(一会你可以看见)

正常写法

 @GetMapping("/judy.html")
    public ProductInfoCategoryEntity productFindOne(){
        ProductInfoCategoryEntity productInfoCategoryEntity = new ProductInfoCategoryEntity();
        ProductInfoCategoryEntity productInfoServiceById = productInfoService.findById(3);
        productInfoServiceById.setProductName("薯条");
        productInfoService.save(productInfoServiceById);
        return productInfoServiceById;
    }

多线程下,主线程和从线程从乐观角度分析


    @GetMapping("judy2.html")
    public String ThreadTest() throws InterruptedException {
        ProductInfoCategoryEntity productInfoServiceById = productInfoService.findById(2);
        productInfoServiceById.setProductName("冰淇淋");
        new Thread(new Runnable() {
            @Override
            public void run() {
                ProductInfoCategoryEntity productInfoServiceById = productInfoService.findById(2);
                productInfoServiceById.setProductName("巧克力");
               productInfoService.save(productInfoServiceById);
            }
        }).start();
        Thread.sleep(10000);
        productInfoService.save(productInfoServiceById);
        return "is judy";
    }

出现错误,出现这个错误的原因是因为主线程在运行的时候一个新的线程过来,导致先执行新的线程,但是这个时候,执行完之后version++,但是对于主线程来说version并不知道++.所以当主线程最终要++的时候发现他变了,所以报错了.(有一行数据已经被另一个事物更改,所以映射失败)

{
“timestamp”: “2019-01-15T23:52:49.097+0000”,
“status”: 500,
“error”: “Internal Server Error”,
“message”: “Object of class [com.judy.demo.Entity.ProductInfoCategoryEntity] with identifier [2]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.judy.demo.Entity.ProductInfoCategoryEntity#2]”,
“path”: “/sell/Xu/Demo/judy2.html”
}

总结

不断成长哦,感谢徐 X X 的知识共享~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王雪芬-Judy领袖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值