美文网首页
java多线程中的wait(),notify(),notifyA

java多线程中的wait(),notify(),notifyA

作者: superpf | 来源:发表于2019-07-16 10:22 被阅读0次

https://www.cnblogs.com/xrq730/p/4853932.html

1、wait()

wait()的作用是使当前执行代码的线程进行等待,将当前线程置入"预执行队列"中,并且wait()所在的代码处停止执行,直到接到通知或被中断。在调用wait()之前,线程必须获得该对象的锁,因此只能在同步方法/同步代码块中调用wait()方法

2、notify()

notify()的作用是,如果有多个线程等待,那么线程规划器随机挑选出一个wait的线程,对其发出通知notify(),并使它等待获取该对象的对象锁。注意"等待获取该对象的对象锁",这意味着,即使收到了通知,wait的线程也不会马上获取对象锁,必须等待notify()方法的线程释放锁才可以和wait()一样,notify()也要在同步方法/同步代码块中调用

总结起来就是,wait()使线程停止运行,notify()使停止运行的线程继续运行

3、interrupt()打断wait()

之前有说过,interrupt()方法的作用不是中断线程,而是在线程阻塞的时候给线程一个中断标识,表示该线程中断。wait()就是"阻塞的一种场景",当一个线程wait()之后,这个线程再调用interrupt()方法,会跳出线程,并抛出java.lang.InterruptedException异常。

4、notifyAll()唤醒所有线程

利用Object对象的notifyAll()方法可以唤醒处于同一监视器下(这里一定注意,不管是wait(),还是notify(),都是由锁调用的函数,唤醒的线程也只是具备相同的锁的线程,而非所有线程)的所有处于wait的线程,唤醒顺序不确定。

相关文章

网友评论

      本文标题:java多线程中的wait(),notify(),notifyA

      本文链接:https://www.haomeiwen.com/subject/tkhctctx.html