• 乐观锁实现


    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();
    }
    }
    });
    }
    }
    执行结果:

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

    
    
  • 相关阅读:
    刷题柱 -- 暂封
    模板重搭建計劃
    思路与好题记录与小技巧
    错误记录
    随便记点东西……
    图床
    杂碎的小技巧
    hnsdfz -- 6.21 -- day7
    hsdf -- 6.21 -- day6
    hnsdfz -- 6.20 -- day5
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/11428129.html
Copyright © 2020-2023  润新知