3

残念なことに、中期的には、決して返されないメソッドを呼び出さなければならず、それを呼び出したスレッドを永久にフリーズする必要があります。幸いなことに、実際の呼び出しはシステム内の他の部分とほとんどやり取りせず、値を返しません。そのため、問題のあるコードを修正できるまで、別のスレッドで呼び出しを実行して、タイムアウトを超えた場合に監視して中断できるようにする必要があると考えています。

私がすでにこの問題を解決し、彼らの贈り物を並行パッケージに残したよりも明らかに賢い人たちです。これが並行パッケージの何かを初めて使用するので、私が最善のアプローチを選んでいることを確認したいと思います.

したがって、Excutors.newSingleThreadExecutor を呼び出して ExecutorService を取得し、それに Runnable を送信してから、タイムアウトをパラメーターとして受け入れる Future.get() のオーバーロードを呼び出すことを考えています。

実際に実行するタスクは、Runnable のコンストラクターに渡すことができるオブジェクトで 1 つの void メソッドを呼び出すことだけです。

これが正しいアプローチである場合、または近い場合は、時間に余裕がある場合は短いコード サンプルも提供していただければ幸いです。:)

ありがとう

4

1 に答える 1

4

私より明らかに頭のいい人たちが、すでにこの問題を解決している

実際には、私見では解決されていません。

タスクを中断するには、適切に動作し、中断を確認する必要があります。そうしないと、実際には停止しません。ただし、行儀が良ければ、そもそも殺す必要はほとんどありません。

Thread.stop()副作用の可能性がないことが確実な場合は、非推奨を使用できます。これには、プレーンなスレッドを使用する必要があります。これが問題を引き起こさないことを「知っている」場合でも理想的ではなく、フラグを使用してタスクを停止することをお勧めします。

于 2012-10-12T16:03:53.790 に答える