就是幾個線程的結果如果都成功了,就一起提交。如果有一個失敗就全部回滾,并給出相關提示信息?網上沒找到比較好的方案
8 回答

慕斯王
TA貢獻1864條經驗 獲得超2個贊
多個線程好解決,樓主想問的是不同進程怎么同步事務吧,比如多個dubbo服務。
確實有這個問題,首先有這樣的技術,可以強一致,但效率犧牲太多,很少有公司這么干;大多數做法都是:服務A提交后,在某個東西(比如zookeeper)上記錄節點;服務B提交后,記錄另一個節點(這些節點都在表示本次事務的樹枝節點下)……后續有個監聽器類的東西,檢查樹枝節點下的節點數、狀態等,如果有問題分別回滾或重試或人工干預等等……

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
在主方法new 一個InheritableThreadLocal 并設值為true,線程中如果出錯則把值改為false。線程全部執行完之后,判斷InheritableThreadLocal 的值,如果為false,你就手動拋出異常聲明式回滾,或者自己寫手動回滾。這樣應該可以達到你的要求吧

拉丁的傳說
TA貢獻1789條經驗 獲得超8個贊
CountDownLatch
加上一個封裝 transaction 和 state 的 queue 每個線程執行時,去隊列中拿一個事務,執行完finally 扔回去并 count() , 并設置state = true;
最后在主線程判斷所有transaction 的state 都是true ,然后就全部提交
添加回答
舉報
0/150
提交
取消