Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen Sleep() und Wait() in Java?

Was ist der Unterschied zwischen Sleep() und Wait() in Java?

WBOY
WBOYnach vorne
2023-04-29 08:37:062116Durchsuche

Erklärung der Unterschiede

1. wait() ist eine Methode von Object, sleep() ist eine Methode von Thread.

2. Wait() muss die synchrone Methode verwenden, die Sleep()-Methode ist nicht erforderlich.

3. Der Thread führt die Methode „sleep()“ in der Synchronisationsmethode aus, ohne die Monitorsperre aufzuheben.

Nach einem kurzen Ruhezustand beendet die Methode „sleep()“ die Blockierung aktiv, während die Methode „wait()“ von anderen Threads unterbrochen werden muss, ohne die Wartezeit zum Beenden der Blockierung anzugeben.

Instanzen

import java.text.SimpleDateFormat;
import java.util.Date;
public class TestSleepAndWait {
public static void main(String[] args) {
new Thread1().start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread2().start();
}
}
class Thread1 extends Thread{
private void sout(String s){
System.out.println(s+" "+new SimpleDateFormat("HH:mm:ss:SS").format(new Date()));
}
@Override
public void run() {
sout("enter Thread1.run");
synchronized (TestSleepAndWait.class){//wait只能在同步代码块或者同步方法中使用
sout("Thread1 is going to wait");
try {
TestSleepAndWait.class.wait(); // 这里只能使用持有锁TestSleepAndWait.class.wait(),使用其他对象则报错java.lang.IllegalMonitorStateException
} catch (InterruptedException e) {
e.printStackTrace();
}
sout("after waiting, thread1 is going on");
sout("thread1 is over");
}
}
}
class Thread2 extends Thread{
private void sout(String s){
System.out.println(s+" "+new SimpleDateFormat("HH:mm:ss:SS").format(new Date()));
}
@Override
public void run() {
sout("enter Thread2.run");
synchronized (TestSleepAndWait.class){//wait只能在同步代码块或者同步方法中使用
sout("Thread2 is going to notify");
TestSleepAndWait.class.notify(); 这里只能使用持有锁TestSleepAndWait.class
sout("thread2 is going to sleep 10ms");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
sout("after sleeping, thread2 is going on");
sout("thread2 is over");
}
}
}

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Sleep() und Wait() in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen