4

以下を含むメソッドを持つJavaコードに出くわしました。

static boolean waitForSeconds(long seconds) {
    試す {
        Thread.sleep(秒 * 1000);
    } キャッチ (InterruptedException ex) {
        false を返します。
    }
    true を返します。
}

これの目的は何でしょうか?戻り値は、計算を続行するかどうかを決定するために使用されます。スレッドが 1 秒間中断されたかどうかを確認するためだけに 1 秒間スリープしようとするのは奇妙に思えます。

このメソッドを呼び出すコードは、thread.isInterrupted() と同じことを達成しようとしていますか? それが何をしようとしているにせよ、より良い方法はありますか?

waitForSeconds の呼び出しは、ループ内ではなく、別のメソッドの先頭に表示されるため、このコードが割り込みのチェックに加えて何らかの目的で 1 秒間待機することを意図している場合、間違った方法でチェックインしているように見えます。場所。睡眠をループの近くに置いたほうがいいのではないでしょうか?

最後の質問については、代わりにここに返信してください。

ループ内の関数呼び出しの近くでスリープするか、関数呼び出し自体でスリープする方が明確ですか?

4

4 に答える 4

4

一時停止するのが目的です。

外側のメソッドを呼び出すコードをチェックして、一時停止する理由を確認してください。
CPU やネットワークを節約したい場合があります。

于 2011-12-28T20:11:33.947 に答える
3

このメソッドの目的は、指定された秒数だけスレッドの実行を停止させることです。catch 句を使用すると、メソッドは、期間が満了するのではなく、スレッドが中断されたことを呼び出し元に伝えることができます。

于 2011-12-28T20:13:08.390 に答える
1

アイデアはおそらく計算に一時停止を導入することですが、一時停止が中断された場合、それは計算が続行されないことを意味します。一時停止が必要な理由は、周囲の (呼び出し元の) コードを見ないとわかりません。

于 2011-12-28T20:13:59.500 に答える
0

彼らは少なくとも x 秒間一時停止したいと思っていると思います。何らかの理由でスレッドがそれほど長くスリープできなかった場合、戻り値を使用してメソッドを再度呼び出します。

于 2011-12-28T20:47:04.937 に答える