JavaにおけるThread.sleep() – Javaのスレッドの休止
はじめに
JavaのThread.sleep()メソッドは、現在のスレッドの実行を指定されたミリ秒の間一時停止させるために使用することができます。ミリ秒の引数値は負の値にすることはできません。そうでない場合、IllegalArgumentExceptionがスローされます。
sleep(long millis, int nanos)は、現在のスレッドの実行を指定されたミリ秒とナノ秒の数だけ一時停止するために使用できる別のメソッドです。許可されるナノ秒の値は、0から999999までです。
この記事では、JavaのThread.sleep()について学ぶことができます。
Thread.sleepがどのように動作するか
Thread.sleep()は、現在のスレッドを指定された時間だけ待機状態にするために、スレッドスケジューラーと対話します。待機時間が終了すると、スレッドの状態は実行可能な状態に変更され、CPUがさらなる実行を待ちます。現在のスレッドがスリープする実際の時間は、オペレーティングシステムの一部であるスレッドスケジューラーに依存します。
JavaのThread.sleepの重要なポイントは以下のようになります。
-
- 常に現在のスレッドの実行を一時停止します。
-
- スレッドが一時停止してから起動して実行を開始するまでの実際の時間は、システムのタイマーやスケジューラに依存します。静かなシステムでは、スリープ時間と指定された時間はほぼ同じですが、忙しいシステムでは少し長くなります。
-
- Thread.sleep()は、取得したモニタを失ったり、現在のスレッドをロックしないです。
- 他のスレッドがsleep中の現在のスレッドを割り込むことができ、その場合はInterruptedExceptionが発生します。
JavaのThread.sleepの例
以下に、Thread.sleep()を使用してメインスレッドの実行を2秒間(2000ミリ秒)一時停止するためのプログラムの例があります。
package com.scdev.threads;
public class ThreadSleep {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(2000);
System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
}
}
最初に、このコードは現在のシステム時間をミリ秒で保存します。そして、2000ミリ秒間スリープします。最後に、このコードは現在のシステム時間から前の現在のシステム時間を引いた値を出力します。
Sleep time in ms = 2005
この違いは、厳密には2000ミリ秒ではないことに注意してください。これは、Thread.sleep()の動作とスレッドスケジューラーのオペレーティングシステム固有の実装によるものです。
結論
この記事では、JavaのThread.sleep()について学びました。
さらにJavaのチュートリアルで学習を続けましょう。