http://blog.csdn.net/mynameismt/article/details/51363120
多線程與事務回滾
業務模型期望的結果是這樣的,檢測子線程的異常情況,如果發生異常,主線程回滾,否則提交
大家都知道runnable有以下特點:
1.業務處理出現checked exception必須在線程中捕獲處理不允許拋出,否則影響run函數的覆蓋;
2.如果線程拋出unchecked(runnable) exception,則線程終結,主線程不受影響。
所以使用runnable,主線程壓根不知道子線程的情況,事務更無從談起。
所以使用Callable機制
兩種方法
1 使用異常
FutureTask
public V get() throws InterruptedException, ExecutionException
主線程 調用 get 直接拋出異常觸發事務管理
2 使用返回
- if ("failed".equals(result)) {
- throw new RuntimeException();
- }
