首页 > 其他 > 详细

乐观锁实现

时间:2019-08-29 11:03:24      阅读:64      评论:0      收藏:0      [点我收藏+]

mapper:


<select id="queryLock" resultType="java.util.Map">
select upg,version from happy_lock
</select>

<update id="editHappyLock" parameterType="java.util.Map">
update happy_lock
set upg=#{upg},version=version+1
where id=#{id} and version=#{version};
</update>
测试:
@Test
public void happyLock() {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(20);
for(int i=0;i<10;i++){
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
try{
Map<String, Object> map = new HashMap<>();
map.put("id", 1);
Random rand = new Random();
Map<String,Object> mapTemp=nyHappyLockService.queryLock();
int randomCount=rand.nextInt(100);
int upg = Integer.valueOf(mapTemp.get("upg").toString());
int version = Integer.valueOf(mapTemp.get("version").toString());
map.put("version", version);
map.put("upg", (randomCount+version));
int count=nyHappyLockService.editHappyLock(map);
System.out.println(Thread.currentThread()+" "+Thread.currentThread().getName()+" 执行的结果数"+count);
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}
执行结果:

技术分享图片

提交的数据 版本号大于数据库表当前版本号,更新。可以看到后面的线程版本号都低于第一个版本 只有第一个执行成功后面的 都废弃了

乐观锁实现

原文:https://www.cnblogs.com/austinspark-jessylu/p/11428129.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!