wait():一旦执行此方法,当前线程就会进入阻塞状态,并且释放同步锁。
-
notify():一旦执行此方法,就会唤醒一个被wait()阻塞的线程,如果有多个线程则唤醒优先级高的,都一样则随机
-
notifyAll():一旦执行此方法,就会唤醒所有被wait()阻塞的线程
-
注意事项:
-
1.wait()、notify()、notifyAll()都必须使用在synchronized包住的同步代码块或者同步方法之中
-
2.wait()、notify()、notifyAll()的调用者和同步监视器是一致的,也就是说如果不一致就会出现
-
illegalMonitorStateException异常
-
3.wait()、notify()、notifyAll()的方法被定义在Java.lang.Object类中,以保证每个类的对象都能调用。
-
wait()方法和sleep()方法的异同:
-
相同点:都能使当前线程进入阻塞状态
-
不同点:1)两个方法申明的位置不同:sleep()方法在Thread类中申明,wait()方法在Object类中申明
-
2)两个方法调用的要求不同:sleep()方法可以在任何需要的场景调用,而wait()方法只能在同步代码块或者同步方法之中调用 -
3)如果两个方法都使用在同步代码块或者同步方法中,sleep()不会释放同步监视器,而wait()会释放同步监视器
本文深入解析Java中的wait、notify和notifyAll方法,它们用于线程间的通信和同步。wait会使当前线程等待,释放同步锁;notify唤醒一个等待的线程,而notifyAll唤醒所有等待线程。调用这些方法必须在同步环境中,否则会抛出异常。同时,对比了wait与sleep方法的区别,wait会释放同步监视器,而sleep不会。
2022

被折叠的 条评论
为什么被折叠?



