4

を使用してExecutorService複数のスレッドからのタスク要求を処理し、Futureから返されたを使用しExecutorService#submit()てタスクの進行状況を追跡しています。

しばらくしてからリクエストがまったく処理されていない場合は、リクエストを削除して、リクエスターにフィードバックを送りたいと思います。

そのため、タスクリクエストが現在処理されているかどうかを知りたいのですが、処理されている場合は、タスクリクエストが完了するのを待つか、それ以外の場合はキャンセルしてリクエスターにフィードバックします。

ヘルプやヒントをいただければ幸いです。ありがとう!

4

3 に答える 3

2

使用Future.cancel(false)すると、タスクがすでに開始されている場合は、タスクを最後まで実行できます。使用cancel(true)しても、トークが中断可能な操作を実行したり、中断されたフラグをチェックしたりしない限り、とにかくそうすることができます。

タスクが開始されたかどうかを知る必要はないと思います。この方法を使用している場合でも、チェックしたときにタスクが開始されていない可能性がありますが、キャンセルしようとした時点でタスクが開始されている可能性があります。

于 2011-11-10T11:07:32.587 に答える
2

これは古い質問ですが、Future.isDone()を使用するのはどうですか?

于 2014-07-04T08:04:13.743 に答える
1

答えには遅すぎますが、ある種の揮発性の「isStarted」フラグを持つようにタスクを定義してみませんか?次に、catch句でフラグをクエリできます。

于 2013-01-09T00:22:29.993 に答える