赞
踩
场景:
小明账户中有10000元,小强账户中有10000元,小红账户中有0元
有三个操作同时进行:小明给小红转账10元 ,小强给小红转账10元,小红自己往账户存入1元
为了模拟高并发,我这里将上述操作复制300份,每份300个线程中同时执行
测试一:
代码如下:(测试代码,细节的判断我就省略了)
这里仅仅引入了事务机制,事务的隔离级别为 REPEATABLE_READ
- /**
- * 转账10元
- */
- @Transactional
- @Override
- public void testTransfer(Integer idFrom, Integer idTo) {
- //SQL语句 : select * from users where id=?
- Users from = usersMapper.selectById(idFrom);
- Users to = usersMapper.selectById(idTo);
- System.out.println(from.getUserName() + "向" + to.getUserName() + "转账 ");
-
- //这里加上10毫秒的延时,用于测试
- delay(10L);
-
- //转账方减10元
- from.setMoney(from.getMoney() - 10);
- usersMapper.updateByPrimaryKey(from);
-
- //这里加上10毫秒的延时,用于测试
- delay(10L);
-
- //收款方增加10元
- to.setMoney(to.getMoney() + 10);
- usersMapper.updateByPrimaryKey(to);
- System.out.println(from.getUserName() + "向" + to.getUserName() + "转账完毕---");
- }
-
- /**
- * 存入1元
- *
- * @param id
- */
- @Override
- @Transactional
- public void testDeposit(Integer id) {
- System.out.println("小红自己存钱

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。