Javaの並行処理入門 – Thread.sleep()メソッドの使い方を解説
sleep()メソッドとは
Thread.sleep()メソッドは、現在実行中のスレッドを、引数で指定したミリ秒数だけ一時停止(スリープ)させるための静的メソッドです。呼び出されると、そのスレッドは指定された時間の間、実行を停止し、CPUの実行権限を他のスレッドに譲ります。
なお、sleep()メソッドはInterruptedExceptionというチェック例外をスローする可能性があるため、必ずtry-catchブロックで囲むか、メソッドの宣言部でthrows句による宣言が必要です。
それでは、具体的な使用例を見ていきましょう。
コード例
import java.lang.*;
public class Demo implements Runnable{
Thread my_t;
public void run(){
for (int i = 0; i < 3; i++){
System.out.println(Thread.currentThread().getName()+ " " + i);
try{
Thread.sleep(100);
}
catch (Exception e){
System.out.println(e);
}
}
}
public static void main(String[] args) throws Exception{
Thread my_t = new Thread(new Demo());
my_t.start();
Thread my_t2 = new Thread(new Demo());
my_t2.start();
}
}実行結果
Thread-0 0 Thread-1 0 Thread-0 1 Thread-1 1 Thread-0 2 Thread-1 2
コードの解説
まず、「Demo」というクラスがRunnableインターフェースを実装しています。次に「run」メソッドを定義し、その中でfor文を使って0から2までの値を繰り返し処理します。各ループでは、getName()メソッドによって現在実行中のスレッド名を取得し、カウンタの値とともに出力しています。
tryブロック内では、Thread.sleep(100)を呼び出すことで、各反復ごとにスレッドを100ミリ秒間停止させています。もし例外が発生した場合には、catchブロックがその内容を出力します。
mainメソッドでは、Demoクラスのインスタンスを持つThreadオブジェクトを2つ生成し、それぞれ「start」メソッドで起動しています。両方のスレッドが並行して動作するため、実行結果では「Thread-0」と「Thread-1」の出力が交互に現れます。これは、一方のスレッドがsleep()で一時停止している間に、もう一方のスレッドが実行権限を得て処理を進めているためです。
sleep()メソッドのポイント
sleep()はThreadクラスのstaticメソッドであるため、インスタンス化せずに直接呼び出せます。また、スリープ中のスレッドに対して割り込み(interrupt)が発生するとInterruptedExceptionがスローされる点にも注意が必要です。スレッド間のタイミング調整やアニメーション処理、ポーリング処理などの場面でよく利用される基本的なAPIなので、確実に理解しておきましょう。
-
Javaのyield()メソッドとは?スレッド制御における重要性と使い方を解説
Javaのyield()メソッドは、Threadクラスに定義されたstaticメソッドです。このメソッドを呼び出すと、現在実行中のスレッドが一時的に実行を中断し、同じ優先度を持つ他の待機中スレッドに実行の機会を譲ることができます。ただし、待機中のスレッドが存在しない場合や、待機中のスレッドがすべて低優先度である場合は、呼び出したスレッド自身がそのまま実行を継続します。yield()メソッドの主な利点は、実行に時間のかかる現在のスレッドがプロセッサを一時的に手放すことで、他の待機中スレッドへCPUリソースを効率的に割り当てられる点にあります。構文(Syntax)public static voi
-
JavaのisDaemon()メソッドとは?デーモンスレッドの判定方法と重要性を解説
Javaにおけるデーモンスレッド(daemon thread)とは、低優先度のバックグラウンドスレッドのことです。主にJVMによって生成され、ガベージコレクション(GC)などの裏方の処理を担当します。デーモンスレッドの最大の特徴は、ユーザースレッドがすべて終了すると、デーモンスレッドの処理中であってもJVMが即座に終了するという点です。つまり、デーモンスレッドの唯一の目的はユーザースレッドを支援することにあり、単独ではプログラムの実行を維持できません。isDaemon()メソッドの役割isDaemon()メソッドを使用すると、あるスレッドがデーモンスレッドかどうかを判定できます。戻り値はboo