我是Java多线程的新手,所以我的问题可能不合理。请帮助我了解它是如何工作的。
ExecutorService executor = Executors.newCachedThreadPool();
List<Future<Boolean>> futures = new ArrayList<>();
for (int i = 0; i < emailAddressList.size(); i++) {
futures.add(executor.submit(new Verify(emailAddressList.get(i))));
}
executor.shutdown();
while(!executor.awaitTermination(3, TimeUnit.SECONDS));
for (int i = 0; i < emailAddressList.size(); i++) {
bufferedWriter.write(emailAddressList.get(i) + "|" + futures.get(i).get());
bufferedWriter.newLine();
}
bufferedWriter.close();
在等待终止循环中,我将超时设置为 3 秒。我在这里试图实现的是,在此超时期间,我想终止所有已存活至少 3 秒的线程。但是我如何识别呢?
它们会自动终止。你的循环是无用的。
您给任务终止 3 秒的时间,如果任务尚未完成,则除了调用尝试强制停止正在运行的线程的 shutdownNow()
之外,您不能做太多事情。如果您认为任务需要三秒以上,请增加超时,但循环没有用。
事实上,等待所有任务终止可能没有用。 如果结果不可用,Future.get()
将阻止,因此您可以开始循环浏览结果。当然,如果Verify
执行一些潜在的危险操作(例如长时间运行而没有超时的网络操作),这可能会阻止所有内容。但这应该在Verify
中修复,而不是在此代码中。