Rumah  >  Artikel  >  Java  >  Apakah perbezaan antara sleep() dan wait() dalam java

Apakah perbezaan antara sleep() dan wait() dalam java

WBOY
WBOYke hadapan
2023-04-29 08:37:062170semak imbas

Penjelasan tentang perbezaan

1 wait() ialah kaedah Object, sleep() ialah kaedah Thread.

2. Kaedah tunggu() mesti disegerakkan dan kaedah sleep() tidak diperlukan.

3 Benang melaksanakan kaedah tidur() dalam kaedah penyegerakan tanpa melepaskan kunci monitor. Kaedah tunggu() melepaskan kunci monitor.

Selepas tidur sebentar, kaedah sleep() akan keluar dari penyekatan secara aktif, manakala kaedah tunggu() perlu diganggu oleh urutan lain tanpa menyatakan masa menunggu untuk keluar dari penyekatan.

Instance

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");
}
}
}

Atas ialah kandungan terperinci Apakah perbezaan antara sleep() dan wait() dalam java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam