在開發當中我們,我們有時為了加快執行速度,會使用到多執行緒!尤其在大量資料插入資料庫時,我們需要使用多執行緒進行批量插入,加快程式的執行效率!
但是由於多執行緒中每個執行緒的事物是不一致的導致程式不一致!為了保證多個執行緒執行插入時,事物的一致性!我們需要將每個執行緒的事物狀態儲存到乙個集合當中,當其中某個執行緒丟擲異常時,我將所有執行緒的事物進行回滾!
實現思路:
1、將所有執行緒的事物狀態儲存到乙個集合裡面,該集合必須是執行緒安全的!
2、定義乙個集合,當執行緒發生異常時,往集合裡面新增資料!
3、當異常標誌集合中存在資料時,說明有執行緒執行出錯了!需要全部回滾資料!
具體實現**如下:
1、注入事物管理類
@autowired
private platformtransactionmanager transactionmanager;
2、具體實現**
public void testthreadinsert() catch (exception e)
countdownlatch.countdown();
});} try
log.info("執行了回滾過程,回滾事物資料集合大小" + transactionstatuses.size());
}long time2 = system.currenttimemillis();
log.info("執行批量插入資料耗時" + (int) ((time2 - time1)) / 1000 + "秒");
} catch (interruptedexception e)
}
上面是主要**,其他**和往常crud一樣! 海量併發下的事物一致性
事物 一系列操作,要麼都執行,要麼都不執行。事物的一致性 分布式的情況下,比如下訂單,有訂單系統,商品庫存,支付系統等。每乙個子系統執行的操作,都是乙個事物。所有子系統執行的操作,合起來還可以看成乙個事物。強一致性 就是同步執行各個事物,所有都正確執行。最終一致性 可以通過訊息佇列完成,比如商品和支...
分布式一致性演算法Paxos JAVA多執行緒方式實現
準備提案過程,獲得大多數決策者支援後進入確認提案階段。public synchronized boolean prepare 獲得承諾 if prepareresult.ispromised else 決策者已經通過了乙個題案 if prepareresult.getacceptorstatus a...
無法跨執行緒操作,與建立控制項的執行緒不一致 解決方案
錯誤請看 private void change private void button1 click object sender,eventargs e 按鈕事件 解決方法 private void change private void threadchange 通過委託處理,msdn上又很詳細...