我需要使用多線程來讀取批量數據文件和處理數據(如數據驗證,跟蹤驗證失敗並插入數據庫等)。我想使用主線程從文件讀取數據並使用ExecutorService
處理數據。使用多線程和ExecutorService使用主線程和進程數據讀取文件
這是相關方法嗎?如果是的話,我該怎麼做?
此外,我需要對每個記錄輸出進行一次驗證和完成數據庫操作。我怎樣才能跟蹤每條記錄的輸出?可以把它放在一個共同的變量,並增加失敗記錄數據的計數?
另外我需要跟蹤有多少記錄順序失敗?
謝謝。
我需要使用多線程來讀取批量數據文件和處理數據(如數據驗證,跟蹤驗證失敗並插入數據庫等)。我想使用主線程從文件讀取數據並使用ExecutorService
處理數據。使用多線程和ExecutorService使用主線程和進程數據讀取文件
這是相關方法嗎?如果是的話,我該怎麼做?
此外,我需要對每個記錄輸出進行一次驗證和完成數據庫操作。我怎樣才能跟蹤每條記錄的輸出?可以把它放在一個共同的變量,並增加失敗記錄數據的計數?
另外我需要跟蹤有多少記錄順序失敗?
謝謝。
是的,這是正確的,但是如果處理需要花費大量時間(與讀取文件相比),那麼處理碎片是獨立的,並且您擁有多個核心,這樣您就會有所改進。 讀取數據到任意容器(如果它在內存適合),並使用任何ExecService教程是這樣的:http://tutorials.jenkov.com/java-util-concurrent/executorservice.html
你的想法是正確的IMO,我會做這樣的事情:
while ((line = filereader.readLine()) != null) {
Mycallable mycallable = new Mycallable(line);
executor.submit(mycallable);
}
我會建議將文件分割成虛擬段,並允許執行者選擇並處理這些段。在主線程中讀取文件最終會造成瓶頸。允許每個線程分別並行讀取其段。請參閱以下文章How to implement Concurrent read to a file mapped to memory in Java?
您的瓶頸很可能是數據庫,所以我會先批量處理數據,因爲這樣更有可能提高性能(並且相對簡單)。對於多線程示例,我會快速搜索在谷歌上。 ;) –