2011-12-28 14 views
3

私は次のことを含む方法を持っているいくつかのJavaコードに出くわした:これの目的であるかもしれない何スレッドが中断したかどうかを確認するためにスリープするのはどうですか?

 
static boolean waitForSeconds(long seconds) { 
    try { 
     Thread.sleep(seconds * 1000); 
    } catch (InterruptedException ex) { 
     return false; 
    } 
    return true; 
} 

?戻り値は、計算を続行するかどうかを決定するために使用されます。スレッドがその秒間に中断されたかどうかをチェックする唯一の目的のために1秒間スリープしようとするのは奇妙に思えます。

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

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

最後の質問の場合は、代わりにこちらをご返信ください:

Is it clearer to sleep near a function call in a loop or in the function call itself?

答えて

3

目的は、一時停止することです。

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

2

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

1

考えているのはおそらく計算にポーズを導入することですが、ポーズが中断された場合は、計算を続行しないことを意味します。周りの(呼び出す)コードを見ることなく、なぜ一時停止が必要なのかは分かりません。

0

私は少なくともx秒間休止したいと思います。何らかの理由でスレッドがそれ以上スリープ状態にならなかった場合、戻り値を使用してメソッドを再呼び出しします

関連する問題