Javaのsleep()とwait()の違い
2914 ワード
sleep()メソッドについては,まずこのメソッドがThreadクラスに属することを知る.wait()メソッドはObjectクラスに属する.
sleep()メソッドにより、プログラムは指定された時間の実行を一時停止し、cpuを他のスレッドから解放したが、彼の監視状態は依然として保持者であり、指定された時間になると自動的に運転状態を回復する.
sleep()メソッドを呼び出すと、スレッドはオブジェクトロックを解放しません.
一方、wait()メソッドを呼び出すと、スレッドはオブジェクトロックを放棄し、このオブジェクトを待つ待機ロックプールに入ります.このオブジェクトに対してnotify()メソッドを呼び出すと、このスレッドはオブジェクトロックプールの準備に入ります.
オブジェクトロックを取得して実行状態にします.
どういう意味ですか.
列の子を挙げて説明します.
実行効果:
コメントが削除された場合:
実行効果:
プログラムは常に保留中です.
sleep()メソッドにより、プログラムは指定された時間の実行を一時停止し、cpuを他のスレッドから解放したが、彼の監視状態は依然として保持者であり、指定された時間になると自動的に運転状態を回復する.
sleep()メソッドを呼び出すと、スレッドはオブジェクトロックを解放しません.
一方、wait()メソッドを呼び出すと、スレッドはオブジェクトロックを放棄し、このオブジェクトを待つ待機ロックプールに入ります.このオブジェクトに対してnotify()メソッドを呼び出すと、このスレッドはオブジェクトロックプールの準備に入ります.
オブジェクトロックを取得して実行状態にします.
どういう意味ですか.
列の子を挙げて説明します.
/**
*
*/
package com.b510.test;
/**
* java sleep() wait()
*/
public class TestD {
public static void main(String[] args) {
new Thread(new Thread1()).start();
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
new Thread(new Thread2()).start();
}
private static class Thread1 implements Runnable{
@Override
public void run(){
synchronized (TestD.class) {
System.out.println("enter thread1...");
System.out.println("thread1 is waiting...");
try {
// wait() , ,
TestD.class.wait();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("thread1 is going on ....");
System.out.println("thread1 is over!!!");
}
}
}
private static class Thread2 implements Runnable{
@Override
public void run(){
synchronized (TestD.class) {
System.out.println("enter thread2....");
System.out.println("thread2 is sleep....");
// notify() 。
TestD.class.notify();
//==================
//
// :TestD.class.notify(); , TestD.class wait() , notify()
// , 。
try {
//sleep() , cpu ,
// , 。
// sleep() , 。
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("thread2 is going on....");
System.out.println("thread2 is over!!!");
}
}
}
}
実行効果:
enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!
thread1 is going on ....
thread1 is over!!!
コメントが削除された場合:
TestD.class.notify();
実行効果:
enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!
プログラムは常に保留中です.