亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java怎么控制多線程的事務??

java怎么控制多線程的事務??

DIEA 2019-02-18 02:04:20
就是幾個線程的結果如果都成功了,就一起提交。如果有一個失敗就全部回滾,并給出相關提示信息?網上沒找到比較好的方案
查看完整描述

8 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

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

查看完整回答
反對 回復 2019-03-01
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

數據庫事務多線程比較麻煩,因為:

  1. 這會占用大量數據庫連接;
  2. 不能用線程池,因為線程運行到最后必須等待協調,要么回滾要么提交。
查看完整回答
反對 回復 2019-03-01
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

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

查看完整回答
反對 回復 2019-03-01
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

CycleBarrier可能用得上。

查看完整回答
反對 回復 2019-03-01
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

通過一個線程安全的標志狀態來同步吧

查看完整回答
反對 回復 2019-03-01
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

CountDownLatch
加上一個封裝 transaction 和 state 的 queue 每個線程執行時,去隊列中拿一個事務,執行完finally 扔回去并 count() , 并設置state = true;
最后在主線程判斷所有transaction 的state 都是true ,然后就全部提交

查看完整回答
反對 回復 2019-03-01
  • 8 回答
  • 0 關注
  • 1573 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號