楼主要学会贴代码public class Demo {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("no args.");
        }
    }
}像楼主的代码层级多,又没有排版,没法看。

解决方案 »

  1.   

    比如说这样的情形:
    第一次生产者放东西,OK没问题,
    第二次生产者放东西,要wait了。
    现在另一个生产者和二个消费者在竞争,
    一个消费者得到了锁,执行后让那个等待的生产者复活。现在4个人重新竞争。
    其中一个生产者(没有wait的那个)得到了锁,执行了一次。
    这时原则上应该让消费者来了。
    然而另一个生产者(wait过的那个)又得到了锁,成功执行了一次(从wait()后面开始执行),不进行判断这不安全。
    ------------------------------------------------------------------------------------------------------------
    有一点不太确定,刚唤醒的线程,不知道是不是比那些没有等待过的线程优先级要高点。