一文看懂wait和notify的虚假唤醒(spurious wakeups)

Posted 业余草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文看懂wait和notify的虚假唤醒(spurious wakeups)相关的知识,希望对你有一定的参考价值。

你知道的越多,不知道的就越多,业余的像一棵小草!

你来,我们一起精进!你不来,我和你的竞争对手一起精进!

编辑:业余草

推荐:https://www.xttblog.com/?p=5257

java 多线程 wait 时为什么要用 while 而不是 if?

对于 java 多线程的wait()方法,我们在 jdk1.6 的说明文档里可以看到这样一段话:

wait方法的JDK文档说明

从上面的截图,我们可以看出,在使用 wait 方法时,需要使用 while 循环来判断条件十分满足,而不是 if,那么我们思考以下,如果使用 if 会怎么样?

为方便讲解,我们来看一个被广泛使用的生产消费的例子。demo 代码如下:

/*
    生产和消费
*/
package multiThread;
 
class SynStack {
    private char[] data = new char[6];
    private int cnt = 0; //表示数组有效元素的个数
     
    public synchronized void push(char ch){
      

以上是关于一文看懂wait和notify的虚假唤醒(spurious wakeups)的主要内容,如果未能解决你的问题,请参考以下文章

一文看懂wait和notify的虚假唤醒(spurious wakeups)

wait/notify之虚假唤醒

wait notify之虚假唤醒

java中wait和notify的虚假唤醒问题

JUC并发编程 --wait 和 sleep的区别 & 加锁对象的小建议 & wait notify 的正确姿势 & 虚假唤醒

Java-JUC:使用wait,notify|notifyAll完成生产者消费者通信,虚假唤醒(Spurious Wakeups)问题出现场景,及问题解决方案。