2

例外が発生すると、ExecutorService で shutdownNow() を呼び出します。isTerminated() が成功ステータスを示し、すべてのスレッドが終了したときに true になり、それ以外の場合は false になると思いました。しかし、私は何があっても常に真実になります。推奨事項はありますか?

4

3 に答える 3

1

shutdownNow()待機中のタスクを停止します。現在待機中のスレッドを実行する場合は、次を使用してみてくださいshutdown()

その上のjavadoc: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#shutdown ()

于 2012-04-11T14:07:42.970 に答える
1

の API ドキュメントに従って、andshutdownNow()ではなく呼び出しているため、 isTerminated() は常に true を返していると思われます。shutdown() shutdownNow()

... 典型的な実装は Thread.interrupt() 経由でキャンセルします

したがって、すべてのタスクが割り込みの試行にすぐに応答し、すぐに完了するように思えます。

于 2012-04-11T14:03:11.317 に答える
0

ドキュメントが言うように、「isTerminatedshutdown または shutdownNow が最初に呼び出されない限り、真になることはありません」。したがって、タスクが成功したかどうかではなく、タスクが終了したかどうかのみがわかります。のようなフラグを設定し、AtomicBoolean正常に完了する直前にその状態を切り替えることができます。このようにして、 のメソッドを使用ExecutorServiceしてタスクが終了したかどうかを確認し、フラグを使用してタスクが正常に終了したかどうかを確認します。

于 2012-04-11T14:05:07.223 に答える