Ben*_*nny 0 java spring multithreading spring-transactions spring-boot
我们遇到了以下问题:我们有一些服务 bean 进行一些处理,并将迭代一个集合并为每个条目启动一个异步线程,如下所示:
@Service
public class ServiceBean {
@Autowired
private AsyncHandler asyncHandler;
public void doService(Set<?> theSet) {
for (Object obj : theSet) {
Future<?> future = asyncHandler.doHandle(obj);
// ...
}
// wait for all futures to complete
}
}
@Service
public class AsyncHandler {
@Async
public Future<?> doHandle(Object object) {
// dosth
return future;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们看到每个线程将持有自己的事务,从而持有自己的数据库连接,这将导致连接池运行非常快。
跨所有线程共享事务的理想方式是什么?
提前致谢!
跨所有线程共享事务的理想方式是什么?
不要那样做。这使得很难理解正在发生的事情。将事务附加到创建它的线程是有原因的。我猜您的计划是启动所有这些异步线程,然后等待它们完成以发送提交信号。
如果你不这样做,谁来完成交易?如果一个线程回滚事务,其他仍在使用它的线程会发生什么?您Connection显然可以绕过,但我希望无论如何都会将事情序列化,因为大多数连接实现都synchronized在不同的地方使用。
| 归档时间: |
|
| 查看次数: |
996 次 |
| 最近记录: |