いくつかのメソッドのAPIコールに付着したスレッドの強制終了
-
21-09-2019 - |
質問
私のシナリオがあります:
私は、タイムアウトや要求ごとに指定されたタイムアウト期間内に応答を生成しなければならないサーバーを実装しています。したがって、各要求は(応答は、もちろん、...トランスポート層の障害に起因するクライアントなどに到達しない可能性があります)サーバの観点からのレスポンスを確保されます。
上記の意味論を実現するために、各要求は、スレッドを生成し(実際には、スレッドプールから使用可能なものを検索)と同期オブジェクトに通知を介してその応答を待ちます。タイムアウトparamはのは、メソッドを待つオブジェクトに送信して待機期間が限定されています。生成されたスレッドの代表者、実際にリクエストを処理する方法を知っているオブジェクトへの要求。このオブジェクトの呼び出しAPIは知られているが、コールが無期限にハングアップしないことを指定します全く知られているサービスレベル契約はありません。 (具体的に私の場合には、サーバーが実際にCORBAクライアントです - 。しかし、それはポイントではありません)。
さて、私は興味のあるものを、私は現在、メソッド呼び出しでブロックされていていても(それを中断)私は何とかそのスレッドが応答しないことを検出し、それを殺すための方法があるかどうかではない?
ちなみに、私はスレッドオブジェクトへの参照を保持し、時間の事前指定された量の後にその割り込み()メソッドを呼び出すことができることを知っています。それは残念ながら確実にセマンティクスを「中断」しません...
のおかげですべての
解決
私はあなたが割り込み()セマンティクスに頼ることができないならば、あなたは運が悪いかもしれないと思います。強制的にスレッドを終了するために信頼できるまたは安全な方法はありません。これは、任意の言語で危険だ。
私はその割り込みを望んでいるだろう()あなたはそれを回避することができたとしても必要なものになるだろう。 CORBA呼び出しは、標準のネットワーククラスを通過する必要があるため、適切に任意のブロック呼び出しで中断しなければならない。
それはあなたが完全な子プロセスを生成する短いできる最善のです。
他のヒント
ExecutorServiceのとコーラブルで実行することが実際のビジネス・ロジックを作ります。 ExecutorServiceので返された今後は、<のhref = "http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html#get%28long,%20java.utilを持っています。あなたが待機する時間を指定することができますconcurrent.TimeUnit%29" のrel = "nofollowをnoreferrer">を取得()の...