ExecutorService 和写入文件
ExecuterService and Writing to File
我正在尝试使用 ExecutorService
来写入文件。但是,当我执行这段代码时,在执行完成之前执行到 outFile.close();
,抛出
java.io.IOException: Stream closed
如何才能在所有任务完成后才调用outFile.close()
?
(PS:为了代码清晰,我删除了所有 try/catch 块。)
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 1000; i++) {
final int counter = i;
executor.execute(new Runnable() {
@Override
public void run() {
outFile.write(wld.getWord(counter) + "successful");
outFile.write("\n");
}
});
}
outFile.close();
您应该先等待所有任务完成。提交所有作业后,您可以调用 executor.shutdown()
并等待所有线程完成使用 executor.awaitTermination()
.
这是一个例子:
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 1000; i++) {
final int counter = i;
executor.execute(new Runnable() {
@Override
public void run() {
outFile.write(wld.getWord(counter) + "successful");
outFile.write("\n");
}
});
}
executor.shutdown(); //shut down executor
executor.awaitTermination(60, TimeUnit.SECONDS); //waiting for 60 seconds
outFile.close(); //and then you may safely close the stream knowing that all the tasks have finished
注意:由于超时,主线程可能会在所有作业完成之前唤醒。您可以增加该时间或循环等待,直到满足 isTerminated()
条件:
executor.shutdown();
while (!executor.isTerminated()) {
executor.awaitTermination(1, TimeUnit.SECONDS);
}
我正在尝试使用 ExecutorService
来写入文件。但是,当我执行这段代码时,在执行完成之前执行到 outFile.close();
,抛出
java.io.IOException: Stream closed
如何才能在所有任务完成后才调用outFile.close()
?
(PS:为了代码清晰,我删除了所有 try/catch 块。)
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 1000; i++) {
final int counter = i;
executor.execute(new Runnable() {
@Override
public void run() {
outFile.write(wld.getWord(counter) + "successful");
outFile.write("\n");
}
});
}
outFile.close();
您应该先等待所有任务完成。提交所有作业后,您可以调用 executor.shutdown()
并等待所有线程完成使用 executor.awaitTermination()
.
这是一个例子:
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 1000; i++) {
final int counter = i;
executor.execute(new Runnable() {
@Override
public void run() {
outFile.write(wld.getWord(counter) + "successful");
outFile.write("\n");
}
});
}
executor.shutdown(); //shut down executor
executor.awaitTermination(60, TimeUnit.SECONDS); //waiting for 60 seconds
outFile.close(); //and then you may safely close the stream knowing that all the tasks have finished
注意:由于超时,主线程可能会在所有作业完成之前唤醒。您可以增加该时间或循环等待,直到满足 isTerminated()
条件:
executor.shutdown();
while (!executor.isTerminated()) {
executor.awaitTermination(1, TimeUnit.SECONDS);
}