我正嘗試同步我的過程,但I`ve得到關於它的質疑同步閱讀。我只有一個輸入文件可以讀取。我正在考慮將讀取方法同步到線程。相反,在創建線程之前,如何將文件讀取到數組中,然後將數組除以線程數目,您會怎麼看?每個線程只能使用這個數組的範圍。陣列範圍或輸入文件
非常感謝大家。
我正嘗試同步我的過程,但I`ve得到關於它的質疑同步閱讀。我只有一個輸入文件可以讀取。我正在考慮將讀取方法同步到線程。相反,在創建線程之前,如何將文件讀取到數組中,然後將數組除以線程數目,您會怎麼看?每個線程只能使用這個數組的範圍。陣列範圍或輸入文件
非常感謝大家。
爲了提高性能,我可以建議你一些方法:
如果它是該文件的內容的簡單的插入,你可以使用LOAD DATA INFILE(MySQL的字)或批量插入(甲骨文字) ,也許你需要在一個線程中創建另一個文件。
您可以將文件拆分爲1000或10000行(示例),並使用多線程使用線程池處理文件以管理線程號https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html。
讀取文件中的一個線程和線程池使用(也許更簡單)給插入操作到另一個線程。
相反,你認爲怎麼樣創建線程,然後線程數除以陣列之前文件讀入到一個數組?每個線程只能使用這個數組的範圍。
是的,我認爲,這使得很多更有意義。通常,當我嘗試處理來自文件的條目時,我有一個線程正在讀取文件,然後排隊等待線程池執行的作業。然後我可以分配一些處理線程,從文件獲取條目並通過ExecutorService
處理它們。取決於實施方式,從BlockingQueue
出列也是可能的。
在半碼,這將是這個樣子:
// file reader
ExecutorService threadPool = Executors.newFixedThreadPool(NUM_WORKERS);
while (true) {
line = file.readLine();
if (line == null) {
break;
}
threadPool.submit(new MyRunnable(line));
}
// shutdown the pool after we submit the last line
threadPool.shutdown();
...
// multiple thread processors
public class MyRunnable implements Runnable {
private final String line;
public MyRunnable(String line) {
this.line = line;
}
public void run() {
processLine(line);
}
}
你的線程用於訪問文件的戰鬥相反,隔離閱讀到一個線程和處理給了別人。
Could'you張貼一些代碼。 –
嗨!編寫代碼之前這是一個想法。這個想法是一個從輸入文件處理單個uid並將其插入到數據庫中的線程。當我創建線程時,我不知道是否在將輸入文件放入數組後,爲每個線程或線程進程同步讀取輸入文件後獲取數組範圍。你怎麼看?謝謝! –
您只需要從文件中插入數據庫uid。這個文件很大,你需要多線程? –