并发问题解决方案

Posted 永远相信美好的事情即将发生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发问题解决方案相关的知识,希望对你有一定的参考价值。

案例原型:对同一商品的库存修改工作

<1>不能通过先查再去修改的方案,通过原生sql进行操作

<2>使用触发器

<3>使用hibernate悲观锁,在查询商品的时候即加锁

<4>使用hibernate乐观锁:在实体类添加version进行版本控制,如果事务操作失败,可提示用户,由用户去决定解决方案;

也可以捕获异常,进行重试机制.具体根据实际的业务需求

案例原型:生成交易单时,交易单号的生成,(查询最大值加1)

<1>同上

<2>同上

<3>使用hibernate悲观锁:

新增一个表temp,存取当前订单号的最大值,每次新增交易单的时候,去temp表去查询,temp表的这条数据进行加锁,不允许任何其他事物

再操作temp.插入交易单后,再去修改temp表中的最大值.为了保证长事物由于锁对性能的影响,尽量在事务方法的末尾去temp表查询和

修改操作

总结:对读操作比较高的,建议使用乐观锁;

       对写操作和数据安全比较高的,建议使用悲观锁

 

以上是关于并发问题解决方案的主要内容,如果未能解决你的问题,请参考以下文章

锁--01---并发问题的解决方案概述

【golang】高并发下TCP常见问题解决方案

并发编程-问题解决

如何解决多并发问题

如何解决多并发问题

多线程并发的问题解决方案