1.比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了,但是只能一个人...
lock.lock();try{//判断if(num != 0){ condition1.await(); }//干活num++; System.out.println(Thread.currentThread().getName()+ "\t:\t" +num);//通知condition2.signal(); }catch(Exception e){ e.printStackTrace(); }finally{ lock.unlock(); } }publicvoiddesc(){ lock.lock();try{if...
如果cpu的调度权被等待的生产者获取到了,此时生产者在 wait()方法处 会直接往下执行,实际上就生产了两个产品。同理消费者也可能同时消费两个产品 根源在于:换性的线程是直接往下执行的并没有判断是否满足对应条件 产生虚假唤醒的源码 classData{intnumber=0;privateLocklock=newReentrantLock();privateConditionconditio...
存在虚假唤醒的情况,如果使用不当,可能会导致程序执行结果错误。
这部分不满足条件的被唤醒的线程就属于虚假唤醒,解决方法就是通过while来循环判断是不是满足条件,这样...
产生虚假唤醒的原因:JVM在实现wait方法时,调用的是操作系统的本地方法,实现线程间的通信效果。wait函数...