各行がの実行可能ファイルを生成し、スレッドプールによって実行される7000万行以上の.csvファイルがあります。このRunnableはMysqlにレコードを挿入します。シャットダウン後にスレッドプールを再利用する方法
さらに、RandomAccessFileのcsvファイルの位置を記録します。位置はファイルに書き込まれます。スレッドプール内のすべてのスレッドが完了すると、このレコードを書き込みます。ThreadPoolExecutor.shutdown()が呼び出されます。しかし、より多くの行が来たら、私は再びスレッドプールが必要です。新しいスレッドプールを作成する代わりに、この現在のスレッドプールを再利用するにはどうすればよいですか?次のように
コードは次のとおりです。
public static boolean processPage() throws Exception {
long pos = getPosition();
long start = System.currentTimeMillis();
raf.seek(pos);
if(pos==0)
raf.readLine();
for (int i = 0; i < PAGESIZE; i++) {
String lineStr = raf.readLine();
if (lineStr == null)
return false;
String[] line = lineStr.split(",");
final ExperienceLogDO log = CsvExperienceLog.generateLog(line);
//System.out.println("userId: "+log.getUserId()%512);
pool.execute(new Runnable(){
public void run(){
try {
experienceService.insertExperienceLog(log);
} catch (BaseException e) {
e.printStackTrace();
}
}
});
long end = System.currentTimeMillis();
}
BufferedWriter resultWriter = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(new File(
RESULT_FILENAME), true)));
resultWriter.write("\n");
resultWriter.write(String.valueOf(raf.getFilePointer()));
resultWriter.close();
long time = System.currentTimeMillis()-start;
System.out.println(time);
return true;
}
ありがとう!
強制的にスレッドを停止するか、すべてのタスクをキャンセルしますか? exectuer.shutdownNow()を使用していますか?このラッパーでも正常に動作しますか? –