# threadTransactionalDemo **Repository Path**: zhaojiyuan/thread-transactional-demo ## Basic Information - **Project Name**: threadTransactionalDemo - **Description**: JAVA多线程事务演示方案 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://blog.csdn.net/zhaojiyuan1024/article/details/124080894 - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-04-09 - **Last Updated**: 2022-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JAVA多线程事务演示方案 ### 简介 一般业务处理放置在service层处理的数据库操作,我们都会使用spring事务进行管理,可是当我们使用多线程时候,线程脱离spring管理,因此是无法进行事务管理的,只能手动管理事务。 该Demo演示如何手动管理多线程事务。 码云Demo地址:https://gitee.com/zhaojiyuan/thread-transactional-demo ### 测试 通过http请求调用controller进行测试: http://localhost:8801/springboot/base/test/threadTransactionalTest ### 注意事项 1. 因为事务需要所有线程都执行完成之后一块提交,因此无法使用线程池管理线程,因为当任务数量高于线程池核心任务数后,没有提交事务的线程会一直占用线程,所以剩余未执行的任务永远等待可用线程造成死锁。当任务数量小于核心任务数时候,也没有必要使用线程池。 2. 请确认任务数量一定要小于项目数据库连接池数量,要不然未提交的事务会一直占用数据库连接,新的任务无法获取到数据库连接,造成死锁。 3. 综合以上原因,建议尽量少用、慎用多线程处理数据库操作。我也在学习中,欢迎交流,共同学习。 ### 致谢 参考【阳宗德】的博客:手动事务及多线程事务 参考地址:https://blog.csdn.net/qq_35385687/article/details/116978028