私が使用している私のコードで
Thread.currentThread().sleep(sleepTime);
コードのメイン (非 Thread オブジェクト) 部分。
うまく機能しているように見えますが、後でお尻に噛み付くような落とし穴が隠れているのではないかと心配しています。
メインプロセスをしばらく放置するより良い方法はありますか? またはこれは所定の方法論ですか?
編集:
なぜこんなことをするのかと言うと…
HTTP または FTP 経由でリモート ホストに接続して処理を行うプロセスがあります。
言い換えると...
もの...
リモートに接続...
リモート接続で何かをする...
接続を閉じます...
より多くのもの...
必要に応じて繰り返します。
非常にまれなケースですが、接続がララランドになることがわかりました。失敗せず、例外もスローせず、ただ消えます。また、ブロックしているため、タイマーをインラインで設定する方法はありません。
だから、私の解決策はこれを行うことです...
もの...
接続を含む新しいスレッドを開始します...
(生成されたスレッドではなく)MAINプロセスでタイマーを使用して無限ループに入り、どちらかを待ちます
a)タスクを完了し、フラグを「完了」に設定する接続スレッド
また
b) あらかじめ設定された時間だけ待機し、接続スレッドが終了したことを報告していない場合は、スレッドを強制終了して次に進みます。
しばらくスリープし、目を覚まし、MAX_WAIT_TIME が期限切れになっているかどうかを確認するのは、メイン プロセスです。そうでない場合は、スリープに戻り、もう少し待ちます。
標準のwhileループに座っているよりも(プロセッサ上で)はるかに効率的であるように見えます。これは、必要なことを行う接続スレッドのビジネスに実際に干渉するためです。
私の質問は本当に... このアプローチについて安全でないものはありますか。私がやっていることを考えると、そうではないようです。おそらく、より標準化されたアプローチがあるかどうかを尋ねる必要がありましたか?