一個好的方法可能是讓一個閱讀器讀取塊,然後將每個塊從線程池移交給工作線程。鑑於這些將被插入到數據庫中,與讀取輸入相比,插入將是緩慢的部分,因此單個線程應該足以進行讀取。
下面是一個示例,將System.in
的每行處理交給工作線程處理。如果您在單個事務中執行大量插入操作,則數據庫插入的性能要好得多,因此,傳遞一組1000行代碼將比傳遞單行代碼更好,如示例中所示。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static class Worker implements Runnable {
private final String line;
public Worker(String line) {
this.line = line;
}
@Override
public void run() {
// Process line here.
System.out.println("Processing line: " + line);
}
}
public static void main(String[] args) throws IOException {
// Create worker thread pool.
ExecutorService service = Executors.newFixedThreadPool(4);
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
String line;
// Read each line and hand it off to a worker thread for processing.
while ((line = buffer.readLine()) != null) {
service.execute(new Worker(line));
}
}
}
嗨埃德感謝^。^所以,如果我讀1000行到一個StringBuffer,然後通過這個開了個工作線程的例子/更新的數據庫,你認爲這會是一個好方法嗎? :) – 2013-04-23 09:11:45
這很可能是最好的1000行讀入'列表'或'的String []'。如果你讀它們放入一個'StringBuffer'那麼它會是一個字符串,你需要分析出各行第二次。 –
2013-04-23 11:15:41