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<Future<Integer>> futures = new ArrayList<Future<Integer>>(); for (int x = 0; x < threadCount; x++) { Callable<Integer> callable = new Callable<Integer>() { @Override public Integer call() throws Exception { synchronizedService.synMethodTwo(); return 1; } }; Future<Integer> submit = executorService.submit(callable); futures.add(submit); } List<Exception> exceptions = new ArrayList<Exception>(); for (Future<Integer> 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异常信息。
该问题的解决方法,可能要从业务设计上或者多任务并发编程上下点功夫,目前我还对这种高并发没有策略。
相关推荐
Java提供了多种框架来编写和管理测试用例,如JUnit、TestNG等。 在描述中提到的"test'testtestestestest"可能是指测试用例中的一个注释或者字符串常量,用于标识或记录测试的目的。在实际的Java测试用例中,我们...
《Java版剑指Offer全部测试用例》是一个针对编程面试准备的重要资源集合,主要涵盖了Java语言实现的《剑指Offer》书中的所有问题及其测试用例。这本书是许多程序员在求职过程中用来提升算法和编程技能的必备参考资料...
JUnit是Java中最广泛使用的单元测试框架,它与JDK紧密集成。JUnit提供了编写和运行可重复测试的结构,帮助开发者快速定位和修复代码中的错误。测试用例通常包括断言(assertions),用于验证代码预期行为是否正确。...
测试类通常会使用JUnit或者TestNG这样的测试框架,它们提供断言工具来检查预期的结果是否与实际结果一致。对于`TaskUtil.java`中的每个方法,测试类都应该有相应的测试方法进行调用和验证。例如,`testCreateTask()`...
8. **性能测试**:除了功能测试,还应考虑性能测试,例如并发请求处理、响应时间和资源消耗等,以评估Action在高负载下的表现。 9. **单元测试和集成测试**:编写针对Action类的单元测试,测试单个方法的行为,然后...
本文将深入探讨"java测试必备工具【用例】"这一主题,旨在帮助开发者和测试工程师提升工作效率,确保软件质量。 首先,我们要明白测试用例在软件开发中的作用。测试用例是一组条件或变量的集合,用于定义对软件进行...
在IT行业中,JUnit是一个非常重要的单元测试框架,主要用于Java编程语言。它允许开发人员编写可重复执行的测试用例,确保代码的质量和功能正确性。本示例将围绕"junit的简单示例"展开,讲解如何使用JUnit进行单元...
本项目`Java8PromisesWithCompletableFuture`提供了一个演示,展示了如何将`CompletableFuture`的回调API与JUnit测试框架结合起来,以进行更高效和可靠的单元测试。 首先,我们需要理解`CompletableFuture`的基本...
这可能需要使用到并发测试框架,如Junit并发规则或者使用`@Test`注解的`@Repeat`和`@Timeout`特性来重复测试并设置超时。 3. **资源管理**:检查线程池的创建和销毁,以及线程生命周期管理,确保没有内存泄漏和资源...
在Java开发中,JUnit是广泛使用的单元测试...通过使用JUnit提供的工具和机制,我们可以创建出模拟真实并发环境的测试用例,有效地检测和预防并发问题。这不仅提升了代码质量,也为团队协作和持续集成提供了坚实的基础。
2. 自动化测试框架:自动化测试框架如JUnit(Java)、pytest(Python)和TestNG(Java),为编写和组织测试代码提供了结构化的框架。它们通常包含断言库、异常处理和报告生成等功能,便于维护和扩展测试代码。 3. ...
TestNG可以组织测试用例为测试套件,支持并发执行,还提供了参数化测试、依赖性测试等功能,非常适合大规模的自动化测试项目。 4. Excel: 在本项目中,Excel被用作存储测试用例的数据源。这使得测试用例的管理变得...
Java多线程与JUnit测试是软件开发中两个重要的概念,特别是在大型项目中,它们的结合使用对于提升代码质量、确保程序稳定性和优化性能至关重要。GroboUtils-5.zip这个压缩包很可能包含了一些辅助进行Java多线程测试...
Junit是Java领域中最广泛使用的自动化测试框架,它简化了编写和执行测试用例的过程,从而提升了软件质量并减少了回归错误的可能性。 首先,Junit的基础概念是理解其核心功能的关键。它允许开发者创建可重复运行的...
JUnit是基于Java的单元测试框架,它提供了编写和运行测试用例的基础设施。开发者可以创建自定义的测试类,每个测试类包含一系列测试方法,这些方法通常以`test`开头,以表明它们是测试用例。JUnit会自动执行这些方法...
7. **单元测试和集成测试**:为了确保代码的质量,响应式框架通常会结合JUnit和Mockito等工具进行单元测试,以及使用Spring Boot的`@WebFluxTest`进行集成测试。 8. **配置管理**:Spring Boot的自动配置和YAML/...
《单元测试之道Java版:使用JUnit》是一本深入浅出的指南,专为Java开发者揭示单元测试的重要性和实践方法。本书以JUnit作为主要工具,详细介绍了如何在Java开发过程中有效地进行单元测试,确保代码的质量和稳定性。...
接着,书中详细讲解了JUnit的基本概念和使用方法,包括如何创建和运行一个简单的JUnit测试用例,如何利用断言验证代码行为,以及如何理解和使用注解来定制测试行为。 书中还涵盖了异常测试、模拟对象(如Mockito)...