一个好的方法可能是让一个阅读器读取块,然后将每个块从线程池移交给工作线程。鉴于这些将被插入到数据库中,与读取输入相比,插入将是缓慢的部分,因此单个线程应该足以进行读取。
下面是一个示例,将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