java接口并发测试用例,Java组合Junit做并发测试用例

1:上一篇博文,介绍了Synchronized 和 配合Spring @Transtaction使用。下面咱们做一个测试。

2:在做并发测试前,可以预先设计使用线程池的execute方法、还是submit,虽然submit方法最后还是调用了线程池的execute;但submit方法封装了一个返回Future的值。

3:测试代码

public class MultiThreadTestCase extends AbstractSpringContextTestSupport {

@Autowired

SynchronizedNoTransService synchronizedNoTransService;

@Autowired

SynchronizedService synchronizedService;

@Test

public void testUpdateBalance() throws Exception {

int threadCount = 2;

ExecutorService executorService = Executors.newFixedThreadPool(threadCount);

List> futures = new ArrayList>();

for (int x = 0; x < threadCount; x++) {

Callable callable = new Callable() {

@Override

public Integer call() throws Exception {

synchronizedService.synMethodTwo();

return 1;

}

};

Future submit = executorService.submit(callable);

futures.add(submit);

}

List exceptions = new ArrayList();

for (Future future : futures) {

try {

future.get();

} catch (Exception e) {

exceptions.add(e);

e.printStackTrace(System.err);

}

}

}

}

SynchronizedService中synMethodTwo的方法,业务逻辑处理最后是更新账户信息;此时会出现并发可能。

(1)相同的数据并发更新。

可以考虑同步方法设计。

(2)不同的数据并发更新

不同数据并发更新账户信息,由于Spring data jpa 维护了version 版本的信息,在遍历线程池submit返回的Future,future.get()方法时,可以看到Console信息两个异常信息,StaleObjectStateException和ObjectOptimisticLockingFailureException异常信息。

该问题的解决方法,可能要从业务设计上或者多任务并发编程上下点功夫,目前我还对这种高并发没有策略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值