我有一个.csv文件,其中包含超过7000万行,其中每行将生成可运行,然后由threadpool执行。这个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()?即使使用这种包装,它也能正常工作吗? –