logo

Java の Thread.sleep() と例

Java Thread クラスは、sleep() メソッドの 2 つのバリアントを提供します。最初のバリアントは引数のみを受け入れますが、もう一方のバリアントは 2 つの引数を受け入れます。 sleep() メソッドは、スレッドの動作を一定時間停止するために使用されます。スレッドがスリープ状態に留まるまでの時間は、スレッドのスリープ時間として知られています。スリープ時間が終了すると、スレッドは終了したところから実行を開始します。

sleep() メソッドの構文:

sleep() メソッドの構文は次のとおりです。

 public static void sleep(long mls) throws InterruptedException public static void sleep(long mls, int n) throws InterruptedException 

1 つのパラメーターを持つメソッド sleep() はネイティブ メソッドであり、ネイティブ メソッドの実装は別のプログラミング言語で実行されます。 2 つのパラメータを持つ他のメソッドはネイティブ メソッドではありません。つまり、その実装は Java で実現されます。 sleep() メソッドのシグネチャには static キーワードが含まれているため、Thread クラスを利用して sleep() メソッドにアクセスできます。ネイティブ メソッドと非ネイティブ メソッドは、チェックされた例外をスローします。したがって、ここでは try-catch ブロックまたは throws キーワードのいずれかが機能します。

Thread.sleep() メソッドはどのスレッドでも使用できます。これは、他のスレッドまたはメインスレッドが sleep() メソッドを呼び出せることを意味します。

パラメーター:

sleep() メソッドで使用されるパラメータは次のとおりです。

ミリリットル: 時間はミリ秒単位でパラメータ mls で表されます。スレッドがスリープする期間は、メソッド sleep() によって指定されます。

n: これは、プログラマまたは開発者がスレッドをスリープ状態にしておくまでの追加時間を示します。 n の範囲は 0 ~ 999999 です。

このメソッドは何も返しません。

Sleep() メソッドについて覚えておくべき重要な点

Thread.sleep() メソッドが実行されると、常に現在のスレッドの実行が停止されます。

現在のスレッドがすでにスリープ モードにあるときに別のスレッドが割り込みを行うと、InterruptedException がスローされます。

スレッドを実行しているシステムがビジー状態の場合、スレッドの実際のスリープ時間は、引数で渡される時間に比べて一般的に長くなります。ただし、sleep() メソッドを実行しているシステムの負荷が低い場合、スレッドの実際のスリープ時間は引数で渡された時間とほぼ同じになります。

Java の sleep() メソッドの例: カスタム スレッド上

次の例は、カスタム スレッドで sleep() メソッドを使用する方法を示しています。

ファイル名: TestSleepMethod1.java

 class TestSleepMethod1 extends Thread{ public void run(){ for(int i=1;i<5;i++){ 500 the thread will sleep for milli seconds try{thread.sleep(500);}catch(interruptedexception e){system.out.println(e);} system.out.println(i); } public static void main(string args[]){ testsleepmethod1 t1="new" testsleepmethod1(); t2="new" t1.start(); t2.start(); < pre> <p> <strong>Output:</strong> </p> <pre> 1 1 2 2 3 3 4 4 </pre> <p>As you know well that at a time only one thread is executed. If you sleep a thread for the specified time, the thread scheduler picks up another thread and so on.</p> <h3>Example of the sleep() Method in Java : on the main thread</h3> <p> <strong>FileName:</strong> TestSleepMethod2.java</p> <pre> // important import statements import java.lang.Thread; import java.io.*; public class TestSleepMethod2 { // main method public static void main(String argvs[]) { try { for (int j = 0; j <5; 1 1000 j++) { the main thread sleeps for milliseconds, which is sec whenever loop runs thread.sleep(1000); displaying value of variable system.out.println(j); } catch (exception expn) catching exception system.out.println(expn); < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 </pre> <h3>Example of the sleep() Method in Java: When the sleeping time is -ive</h3> <p>The following example throws the exception IllegalArguementException when the time for sleeping is negative.</p> <p> <strong>FileName:</strong> TestSleepMethod3.java</p> <pre> // important import statements import java.lang.Thread; import java.io.*; public class TestSleepMethod3 { // main method public static void main(String argvs[]) { // we can also use throws keyword followed by // exception name for throwing the exception try { for (int j = 0; j <5; j++) { it throws the exception illegalargumentexception as time is -ive which -100 thread.sleep(-100); displaying variable's value system.out.println(j); } catch (exception expn) iscaught here system.out.println(expn); < pre> <p> <strong>Output:</strong> </p> <pre> java.lang.IllegalArgumentException: timeout value is negative </pre> <hr></5;></pre></5;></pre></5;i++){>

ご存知のとおり、一度に実行されるスレッドは 1 つだけです。指定された時間スレッドをスリープすると、スレッド スケジューラは別のスレッドを選択し、以下同様に続きます。

Java の sleep() メソッドの例: メインスレッド上

ファイル名: TestSleepMethod2.java

 // important import statements import java.lang.Thread; import java.io.*; public class TestSleepMethod2 { // main method public static void main(String argvs[]) { try { for (int j = 0; j <5; 1 1000 j++) { the main thread sleeps for milliseconds, which is sec whenever loop runs thread.sleep(1000); displaying value of variable system.out.println(j); } catch (exception expn) catching exception system.out.println(expn); < pre> <p> <strong>Output:</strong> </p> <pre> 0 1 2 3 4 </pre> <h3>Example of the sleep() Method in Java: When the sleeping time is -ive</h3> <p>The following example throws the exception IllegalArguementException when the time for sleeping is negative.</p> <p> <strong>FileName:</strong> TestSleepMethod3.java</p> <pre> // important import statements import java.lang.Thread; import java.io.*; public class TestSleepMethod3 { // main method public static void main(String argvs[]) { // we can also use throws keyword followed by // exception name for throwing the exception try { for (int j = 0; j <5; j++) { it throws the exception illegalargumentexception as time is -ive which -100 thread.sleep(-100); displaying variable\'s value system.out.println(j); } catch (exception expn) iscaught here system.out.println(expn); < pre> <p> <strong>Output:</strong> </p> <pre> java.lang.IllegalArgumentException: timeout value is negative </pre> <hr></5;></pre></5;>

Javaのsleep()メソッドの例:スリープ時間が-iveの場合

次の例では、スリープ時間が負の場合に例外 IllegalArgumentException をスローします。

ファイル名: TestSleepMethod3.java

 // important import statements import java.lang.Thread; import java.io.*; public class TestSleepMethod3 { // main method public static void main(String argvs[]) { // we can also use throws keyword followed by // exception name for throwing the exception try { for (int j = 0; j <5; j++) { it throws the exception illegalargumentexception as time is -ive which -100 thread.sleep(-100); displaying variable\'s value system.out.println(j); } catch (exception expn) iscaught here system.out.println(expn); < pre> <p> <strong>Output:</strong> </p> <pre> java.lang.IllegalArgumentException: timeout value is negative </pre> <hr></5;>