2016-04-08 6 views
3

私はopenejbと非同期EJBを使用しています。私は先物がたくさんあり、先物の1つに時間がかかりすぎるかどうかを知りたい(私はそれをトレースして最終的に取り消すことができます)。問題は、将来のsiがどれくらいの期間実行されているかを知るためには、いつ開始するのかを知る必要があるということです。 未来のインターフェイスは、未来が終了したかキャンセルされたかを教えてくれますが、そうでなければ、プール内のスレッドを実行しているのか、それともスレッドを待っているのか分かりません。 未来状態(実行中/開始していない状態)を取得できますか?未来が始まるかどうかを知る

おかげ

+0

「未来」がこれを可能にするようには思われません。タスクを常にコレクションに追加してから、コレクションをチェックして、実行中のタスクを確認することができます。 –

+0

はい、しかし私は汎用的な解決策を持っています – jaudo

+0

このフラグのようなシステムは、この動作を簡単に達成する唯一の方法だと思われます。あなたの次のオプションは、将来のそれぞれにフラグを追加するための 'Future'インタフェースにまで拡張されます。しかしこれは、実行者があなたにフラグを含むあなたの 'Future'実装のインスタンスを渡させるために、あなたが現在使っているエグゼキュータのいずれかを使いこなすことを必要とします。 –

答えて

-1

私はあなたの意図が 1であると信じて)その撮影が長すぎる場合は、それをキャンセルし、今後の 2)を使用して提出したタスクからの戻り値を取得します。

これが正しい場合は、タイムアウト値を指定してgetを使用してください。

+1

'Future'がプールからスレッドを解放するのを待っている可能性があるためです。 5秒後にタイムアウトした場合でも、タスクが進行中かどうかを判断する方法はまだありません。また、タスクがまだスレッドで待機していた場合は –

+1

タイムアウトが欲しいものではありません。将来がタイムアウト内に終了していない場合でも、開始されていなくても、get(timeout)は失敗します。私が望むのは、スレッドが実行されている時間を知ることです。編集:ヴィンスは私よりもそれを説明した:) – jaudo

関連する問題