JavaのThreadクラスsleepメソッドを完全ガイド!初心者でもわかるスレッドの一時停止
Javaの基礎を体系的に整理しながら学習したい方には、 資格対策としても定評のある定番教材が参考になります。
Javaプログラマ Silver SE 17 教科書をAmazonで見る※ Amazon広告リンク
生徒
「Javaでスレッドを一時的に止めたいときってどうすればいいですか?」
先生
「そのときに役立つのがThreadクラスのsleepメソッドです。java.langパッケージに含まれていて、指定した時間だけスレッドを停止できます。」
生徒
「なるほど!でもsleepを使うときに気をつけることってありますか?」
先生
「はい、いくつかポイントがあるので順番に詳しく説明していきましょう。」
1. sleepメソッドとは?
sleepメソッドは、スレッドを一定時間だけ一時停止させるための静的メソッドです。Javaのjava.lang.Threadクラスに用意されており、ミリ秒単位で待機時間を指定します。例えば「1秒間だけスレッドを止めたい」といった制御が可能になります。並行処理を行うプログラムで一時的な待機やリズムをつけたいときに便利です。
2. 基本的な使い方
sleepメソッドの基本的な使い方は以下の通りです。Thread.sleep(時間)という形で使います。時間はミリ秒単位で指定します。
public class SleepExample {
public static void main(String[] args) {
System.out.println("処理開始");
try {
Thread.sleep(2000); // 2秒間停止
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("2秒後に処理再開");
}
}
処理開始
2秒後に処理再開
3. InterruptedExceptionに注意
sleepメソッドを使うときには必ずInterruptedExceptionを処理する必要があります。これはスレッドが停止している間に割り込みが発生した場合にスローされる例外です。基本的にはtry-catchで例外処理を記述しておきます。
4. 複数スレッドとsleepの組み合わせ
複数のスレッドを同時に実行しながら、一定時間ごとに処理を止めることで動作を分かりやすく制御することができます。以下は二つのスレッドを動かし、それぞれ1秒ごとにメッセージを表示する例です。
public class MultiSleepExample {
public static void main(String[] args) {
Runnable task1 = () -> {
for (int i = 0; i < 3; i++) {
System.out.println("タスク1: " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Runnable task2 = () -> {
for (int i = 0; i < 3; i++) {
System.out.println("タスク2: " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
new Thread(task1).start();
new Thread(task2).start();
}
}
5. sleepメソッドと時間単位
Thread.sleepはミリ秒単位で指定します。例えば1000で1秒、5000で5秒停止します。また、引数を二つ指定することでナノ秒単位の待機を加えることもできます。ただし実際にはOSやCPUのスケジューリングに依存するため、完全に正確な時間で停止するとは限りません。
6. sleepメソッドの使いどころ
sleepはさまざまな場面で使われます。例えば、一定時間ごとにログを出力する処理、APIにアクセスする間隔を調整する処理、ゲームのフレームレートを制御する処理などです。初心者がスレッドプログラミングを学ぶときには、処理の流れを見やすくするためにもsleepを挟むと理解しやすくなります。
7. 注意点とベストプラクティス
sleepを乱用するとプログラム全体のレスポンスが悪くなったり、意図せず処理が遅延する原因になることがあります。また、マルチスレッド環境では他のスレッドとのバランスを考えて設計する必要があります。できるだけ必要な場面でのみ使い、処理待ちには他の方法(例: waitや同期機構)を検討するのが望ましいです。
8. java.langパッケージとThreadクラスの関係
java.langパッケージはJavaで最も基本的なパッケージであり、自動的に読み込まれます。その中に含まれるThreadクラスは並行処理の中心的な存在です。sleepメソッドはこのThreadクラスに備わっているため、初心者でもインポート不要ですぐに使える便利な機能です。