如果我使用多线程,为什么代码片段无法正常工作?



我尝试在这里使用多线程教程 因此,改编的代码片段是

ExecutorService executorService = Executors.newFixedThreadPool(5);
Future<Boolean> res = executorService.submit(() -> {
while (true) {
UserCsv csv = queue.poll();
if (csv == null) break;
System.out.println(csv);
}
return true;
});
executorService.shutdown();

队列包含 65k 条记录。 如果我在没有线程的情况下执行此任务 - 一切都是 okey,执行代码后队列为空,但是,当我尝试使用线程时 - 在执行代码之后,我在队列中有 60k 条记录。 代码出了什么问题?

from void shutdown((

此方法不会等待以前提交的任务完成执行。使用 awaitTerminate 来执行此操作。

因此,要么等待未来,要么使用awaitTermination

executorService.shutdown();
try {
//Add your timeout limit if you want
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
...
}

最新更新