2010-12-14 20 views
1

私の呼び出し可能コードでは、複数の終了動作を別のスレッドに通知するために信号を使用します。 Callableオブジェクトは、ExecutorにFutureTasksでキューイングされます。キューイングされた後でキャンセルされることもあります。キャンセルする前にFutureTaskを開始する必要があります

私の問題は、私のシグナリングが動作するために最低限必要なタスクに頼っていることですが、実行する機会を得る前にキ​​ャンセルとマークされていれば、

したがって、実行中にタスクが常に開始され、(InterruptedExceptionによって)キャンセルされることを保証する方法はありますか。

また、タスクが開始されても失敗したかどうかを確認できますか?

+0

私は答えが単純な「いいえ」と思われます – skaffman

答えて

2

おそらくFutureTaskクラスをサブクラス化し、そのdone()メソッドをオーバーライドしてシグナリングを実行できます。ドキュメンテーションによると、このメソッドは、タスクがキャンセルされても呼び出されるべきです。

+0

その解決策は素晴らしいです! Callable.run()が呼び出されたかどうかを追跡する変数hasStartedを追加し、hasStartedがfalseの場合にトリガーされるFutureTask.done()にいくつかのシグナリングを追加しました。 – hishadow

関連する問題