Javaにおけるwait()とsleep()の違い
2124 ワード
基本的な違い:1.wait()はObjectクラスで定義されたメソッドであり、sleep()はThreadクラスで定義されたメソッド2.sleep()メソッドはどこでも使用できます.wait()はsynchronizedメソッドまたはsynchronizedコードブロックでのみ使用できます.ロックを解放するため、ロックを解放する前にロックを取得する必要があります.
本質的な違い:thread.sleep()はCPUを解放しますが、オブジェクトロックobject.wait()はCPUを解放しません.また、オブジェクトロックも解放します.
本質的な違い:thread.sleep()はCPUを解放しますが、オブジェクトロックobject.wait()はCPUを解放しません.また、オブジェクトロックも解放します.
public class Test {
public static void main(String[] args) {
final Object lock = new Object();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread A is waiting to get lock");
synchronized (lock){
System.out.println("thread A get lock ");
try {
Thread.sleep(20);
System.out.println("Thread A do wait method");
lock.wait(1000);
System.out.println("Thread A is done");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("thread B is waiting to get lock");
synchronized (lock){
System.out.println("thread B get lock ");
try {
Thread.sleep(10);
System.out.println("Thread B do wait method");
System.out.println("Thread B is done");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
:
thread A is waiting to get lock
thread A get lock
thread B is waiting to get lock
Thread A do wait method
thread B get lock
Thread B do wait method
Thread B is done
Thread A is done