私はJavaマルチスレッドの初心者ですので、私の質問は不合理なことがあります。私はそれが他の方法で動作するか理解してください。ExecutorServiceでタイムアウトしたスレッドのみを終了するにはどうすればよいですか?
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();
awaitTerminationループでは、TimeOutを3秒に設定しました。私がここで達成しようとしていることは、このタイムアウトで、少なくとも3秒間生存していたスレッドを終了したいのです。しかし、私はそれをどのように特定するのですか?
私はそれを行うことができます。しかし、shudowNow()はキューのすべてのジョブも終了させますか?実行しているタスクも含めて、右か? –
キューにあって実行を開始しなかったタスクを返します。スレッドを中断して実行中のタスクを停止しようとします。適切なタイムアウトを設定すると、 'shutdown()'を呼び出すだけで十分でしょう。タイムアウトが超過して何か問題がある場合は、 'shutdownNow()'が必要です。 – Kayaman
私はそれが実行しなかったものを返すことを理解しています、あなたは提案します、私はこれらの未使用のタスクを再度実行するために実行に提出しますか? –