mapper:
update happy_lock set upg=#{upg},version=version+1 where id=#{id} and version=#{version}; 测试:
@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{ Mapmap = new HashMap<>(); map.put("id", 1); Random rand = new Random(); Map 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(); } } }); } } 执行结果:
提交的数据 版本号大于数据库表当前版本号,更新。可以看到后面的线程版本号都低于第一个版本 只有第一个执行成功后面的 都废弃了