繁体   English   中英

如何在多线程之间共享一个事务

[英]how to share one transaction between multi threads

我们遇到了一个适用于多线程的场景。

在主线程中,做一些逻辑并更新数据库,在某一点上,它会调用另一个服务来更新数据库,这是在另一个线程中运行的。

我们希望两个线程共享相同的事务,这意味着,任一线程中的任一操作都失败,那么另一个线程中的操作也将被回滚。

但是工作了几天,我发现一些帖子说JTA不支持多线程。 目前我们使用Bitronix作为JTA提供程序,有没有人知道Bitronix是否支持一个Transaction中的多线程? 或者是否有任何其他JTA提供程序支持此(独立JTA提供程序而非J2EE容器)?

“多个线程可能同时与同一个全局事务相关联。” - JTA规范v1.1,第3.2节,第13页。

JBossTS将处理没问题。 除了检查交易行为之外,困难实际上并不是事务管理器。 您还需要正确处理与资源管理器(即数据库)的连接。 如果您在线程之间共享一个连接,则不一定会以串行方式运行任何加速,因为除非驱动程序支持高效多路复用,否则它可能是瓶颈。 另一方面,如果您使用多个连接,则需要确保驱动程序能够合理地实现isSameRM以避免2PC,并且如果线程需要查看彼此对数据库的未提交更改,则还允许事务分支锁共享(紧密耦合)。 所以除了一个好的事务管理器之外,你还需要一个好的连接管理器,例如JCA实现和一个好的数据库驱动程序。 祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM