Explication des différences
1. wait() est une méthode d'Object, sleep() est une méthode de Thread.
2. Wait() doit utiliser la méthode synchrone et la méthode sleep() n'est pas requise.
3. Le thread exécute la méthode sleep() dans la méthode de synchronisation sans libérer le verrouillage du moniteur. La méthode wait() libère le verrouillage du moniteur.
Après une courte veille, la méthode sleep() quittera activement le blocage, tandis que la méthode wait() devra être interrompue par d'autres threads sans spécifier le temps d'attente pour sortir du blocage.
Instances
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"); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!