thread sleep thread sleep method java with examples
このチュートリアルでは、JavaのThread Sleep()メソッドについて説明します。例を使用して、Thread.Sleep()メソッドがどのように機能するかを確認します。
ザ・ java.lang.Thread.sleep(longミリ秒) methodは、現在実行中のスレッドをスリープ状態にするThreadクラスによって提供されるメソッドです。 sleepメソッドの引数としてsleep時間を指定します。
学習内容:
JavaのスレッドSleep()メソッド
JavaのThreadクラスは、sleepメソッドの2つのバリアントを提供します。
sleep()メソッドの両方のバリアントのプロトタイプを以下に説明します。
#1)スリープメソッドバリアント#1
プロトタイプ: public static void sleep(long mills)throws InterruptedException
パラメーター: ミリ秒=>スレッドがスリープする時間(ミリ秒単位)。
戻り値: ボイド
スロー:
- IllegalArgumentException =>ミリ秒が負の場合
- InterruptedException =>他のスレッドが現在のスレッドに割り込んだ場合。この例外が発生すると、スレッドの中断ステータスがクリアされます。
説明: このsleepメソッドのバリエーションにより、現在のスレッドがスリープ状態になるか、指定されたミリ秒数の間実行が一時的に停止します(メソッド引数で指定)。ただし、スリープ中に、スレッドがモニターを失ったり、所有権をロックしたりすることはありません。
#2)スリープメソッドバリアント#2
プロトタイプ: public static void sleep(long millis、int nanos)はInterruptedExceptionをスローします
パラメーター:
音声認識ソフトウェアは、
- ミリス=> スレッドがスリープしなければならないミリ秒単位の期間。
- nanos => スレッドがスリープできる追加のナノ秒。範囲は0〜999999です。
戻り値: ボイド
スロー:
- IllegalArgumentException => ミリ値が負の場合、または範囲外の場合はナノ値。
- InterruptedException => 他のスレッドが現在のスレッドに割り込んだ場合。この例外が発生すると、スレッドの割り込みステータスはクリアされます。
説明: このsleepメソッドの変形により、スレッドはスレッドを呼び出してスリープ状態にするか、指定されたミリ秒数の間実行を一時的に停止します。 (メソッド呼び出しの最初の引数)。さらに、スリープのナノ秒数(メソッド呼び出しの2番目の引数)も提供しました。
指定された時間の精度と精度は、システムのタイマーとスケジューラーに依存することに注意してください。スレッドがスリープしているとき、ロックまたはモニターの所有権は変更されません。
Thread.Sleepメソッドの動作
スレッドがスリープまたは中断されるたびに、スケジューラーによって実行されます。メソッドThread.sleep()はスレッドスケジューラと通信するため、スケジューラは現在実行中のスレッドを変更して、指定された期間状態を待機させることができます。
この指定された時間が経過すると、スレッドの状態が「実行可能」に変更され、CPUが実行を続行するのを待つことができます。
したがって、スレッドがスリープする時間は、メソッドではなくスケジューラーに依存します。スケジューラはオペレーティングシステムの一部であるため、OSアーキテクチャはスレッドの状態変化にも関与します。
アンドロイドのための最高の無料mp3ダウンローダー
Thread.sleep()メソッドについて詳しく見てきたので、このメソッドを使用する際には、いくつかの点に注意する必要があります。
ポインタが含まれます:
#1) Thread.sleep()メソッドは、常に現在のスレッドの実行を一時停止します。
#二) スレッドがスリープする実際の期間は、スケジューラーとシステムタイマーによって異なります。
例えば、 非常にビジーなシステムの場合、スレッドのスリープ時間は指定された時間より長くなる可能性がありますが、それほどビジーでないシステムの場合は、指定された時間に多少近い可能性があります。
#3) スレッドがスリープしている間、スリープする前に取得したロックやモニターが失われることはありません。
#4) スリープ状態にある現在のスレッドは、他のスレッドによって中断される可能性があります。この場合、「InterruptedException」がスローされます。
JavaでのThread.sleepの例
次に、スリープ方法を示す例に移りましょう。ここに、run()メソッドを持つスレッドクラスがあります。 run()メソッドでは、「Thread.sleep(1000)」を呼び出します。次に、main関数で、このスレッドの2つのインスタンス、つまり2つのスレッドを作成します。次に、スレッドを開始します。
出力では、両方のスレッドが実行されているため、スレッドが次々にスケジュールされていることがわかります。つまり、一方がスリープ状態になると、もう一方が実行されます。
例:
class SleepThread extends Thread { //run method for thread public void run() { for(int i=1;i<5;i++) { try { //call sleep method of thread Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e);} //print current thread instance with loop variable System.out.println(Thread.currentThread().getName() + ' : ' + i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread thread_1 = new SleepThread(); SleepThread thread_2 = new SleepThread(); //start threads one by one thread_1.start(); thread_2.start(); } }
出力:
出力を観察すると、Thread_0とThread_1が交互に実行されていることがわかります。
負のスリープ時間値を持つThread.sleep()
次に、Thread.sleep()メソッドの別の例を示しましょう。ここでは、睡眠時間の値が負の特殊なケースを検討しました。プログラムは上記のプログラムと似ていますが、提供されるスリープ時間は-500です。
例:
class SleepThread extends Thread { public void run() { for(int i=1;i<5;i++) { try { //call sleep method with negative value of time Thread.sleep(-500); }catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread t1=new SleepThread(); SleepThread t2=new SleepThread(); //start the threads one by one t1.start(); t2.start(); } }
出力:
出力から、スリープ時間の負の値が受け入れられないため、メソッドが「IllegalArgumentException」をスローしたことがわかります。
よくある質問
Q#1)Javaでスレッドスリープはどのように機能しますか?
回答: ミリ秒単位で指定された時間内にsleep()がスレッドで呼び出されると、スレッドは実行を停止します。 CPUを放棄します。したがって、スレッドがスリープしている間、他のスレッドはCPUを使用できます。
Q#2)スレッドJavaのyield()とsleep()とは何ですか?
回答: スレッドのsleep()メソッドにより、スレッドはCPUを放棄し、実行を停止します。このスレッドがスリープしている間、他のスレッドはCPUを取得します。これはスケジューラーによって行われます。
また、yield()メソッドを使用すると、スレッドは呼び出されたときにCPU制御を放棄しますが、sleep()メソッドは、yield()と比較してより明確な動作を示します。
Q#3)Javaスレッドがスリープ状態になるのをどのように止めますか?
回答: 割り込み()メソッドを使用して、Javaスレッドのスリープを停止します。待機中またはスリープ中のスレッドは、Threadクラスのinterrupt()メソッドを呼び出すことで中断できます。
Q#4)Javaでスレッドを強制終了できますか?
EclipseでJavaアプリケーションを開発する方法
回答: いいえ、Javaではスレッドは強制終了されません。代わりに、スレッドはJavaで停止します。スレッドは終了し、正常にシャットダウンできます。スレッドを終了できるように、値の変更がないか定期的にチェックされる揮発性ブール値フィールドを使用することがよくあります。
Q#5)sleep()が静的メソッドなのはなぜですか?
回答: sleep()メソッドを呼び出してスレッドをスリープ状態にするときは、常にThreadクラスを使用して呼び出します。
例えば 、Thread.sleep(1000);
上記の呼び出しは、現在のスレッドコンテキストで機能し、現在のスレッドをスリープ状態にします。特定のスレッドインスタンスを使用してメソッドを呼び出すことはありません。したがって、メソッドは静的です。
結論
このチュートリアルでは、Javaのスレッドのsleep()メソッドについて説明しました。 Sleep()メソッドを使用すると、実行中の現在のスレッドは、sleepメソッドの引数として指定された時間だけ実行を停止します。
システムスケジューラはsleepメソッドと連携して、現在のスレッドを待機状態にします。スレッドがスリープしている間、スレッドは取得したロックまたはモニターを保持し続けます。スリープ時間の負の値をsleepメソッドに渡すと、「IllegalArgumentException」がスローされます。
有効なスリープ時間の値をsleep()メソッドに渡すと、現在のスレッドがスリープしている間、他のスレッドが順番に実行されます。
=> ここでJavaトレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください。