Tôi có tệp .csv chứa hơn 70 triệu dòng trong đó mỗi dòng là tạo ra một Runnable và sau đó được thực hiện bởi luồng. Runnable này sẽ chèn một bản ghi vào Mysql.Làm thế nào có thể sử dụng lại một threadpool sau khi tắt
Hơn nữa, tôi muốn ghi lại vị trí của tệp csv cho số RandomAccessFile để định vị. Vị trí được ghi vào File. Tôi muốn viết bản ghi này khi tất cả các chủ đề trong threadpool được hoàn thành.So ThreadPoolExecutor.shutdown() được gọi. Nhưng khi có nhiều dòng hơn, tôi cần một lần nữa. Làm thế nào tôi có thể tái sử dụng threadpool hiện tại này thay vì làm cho một cái mới.
Mã này là như sau:
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;
}
Cảm ơn!
làm cách nào để buộc dừng chuỗi hoặc hủy tất cả tác vụ? sử dụng exectuer.shutdownNow()? nó sẽ làm việc tốt ngay cả với wrapper này? –