簡體   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