看到一个很有趣的问题:java多线程wait为什么用while判断
https://blog.csdn.net/qq_39552993/article/details/91348409
tzq233《java多线程wait为什么用while判断》
如果有n个生产者,n个消费者,当存储空间满了之后,假如n(大于1个)个生产者被wait,进入等待唤醒队列。当某个消费者取走了一个数据后,如果调用notifyAll(),则n个生产者线程都将被唤醒,如果此时生产者线程中的wait不在while循环中而是在if中,则这些生产者线程就不会再次判断是否符合执行条件,都将直接执行wait()之后的程序,那么如果其中一个生产者线程放入了一个数据至存储空间,则此时存储空间已经满了,但是其他生产者线程还是会继续往存储空间里放数据,错误便产生了。