質問:WorkerThread
Java 1.2でバックグラウンドスレッド(このスレッドと呼びましょう)として実行されている長年の操作を強制終了するためのベストプラクティスを知りたいです。
シナリオ
具体的には、HTTP接続を確立するBlackberryデバイス用のアプリケーションを開発しています。全体像:バックグラウンドスレッド(WorkerThread
)に転送された場合のURL要求。スレッドは要求を行い、コールバックを使用して結果を返します。
シナリオの詳細
現在、接続時にデータ接続は存在するが、何らかの理由(トンネルを介してドライブ)でその接続が存在しなくなるという状況が存在します。Blackberryの設計アーキテクチャの制限により、タイムアウトが2分に固定されているため、実際の接続はハングします。その結果、比較的(15秒)長期間ハングしている接続を強制終了する必要があります。
私の現在の解決策-2Theads?
現在の私の現在の解決策は、WorkerThread
別のスレッド内で実行することです(この新しいスレッドと呼びましょうMonitorThead
)。MonitorThread
開始WorkerThread
し、1000ミリ秒間スリープしてから、WorkerThread
まだ生きているかどうかを定期的にチェックします。15秒後もWorkerThreadがまだ生きている場合、MonitorThreadはWorkerThreadをスリープ状態にして終了します。これは本当に最善のアプローチですか?
質問とキーポイントの要約
要約すると、以下は主要な質問とその質問に関連する重要な制約です。乾杯!
特定の操作でスタックしているJavaバックグラウンドスレッドを正常に強制終了するにはどうすればよいですか?
シナリオの制約:
- 操作を一時停止し、スレッドが要求した状態を確認する制御はありません
- BlackberryによるJavaME1.2とその スレッドAPIの実装に固有であるため、明示的な kill()メソッドはありません。
- ベストプラクティスと、保持スレッドを最も安全に強制終了する方法について最も懸念しています。
フォローアップ/編集
NeilCoffeyは、接続オブジェクトへの参照を保持し、代わりにそのオブジェクトでclose()を呼び出すことをお勧めします。私は現在これを調べています...