关机后如何重用线程池
2022-08-31 19:57:06
我有一个.csv文件,其中包含超过7000万行,其中每行都生成一个Runnable,然后由threadpool执行。这个Runnable将在Mysql中插入一条记录。
更重要的是,我想记录csv文件的位置,以便RandomAccessFile找到。该位置将写入文件。我想在线程池中的所有线程都完成后写入此记录。所以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;
}
谢谢!