使用生产者消费者模型来说明,伪唤醒造成的后果是本来未被唤醒的线程被唤醒了,那么就破坏了生产者消费者中的判断条件,也就是例子中的while条件number == 0或者number == 1。最终导致的结果就死0和1不能交替出现。 JDK的两种同步方案均可能出现这种伪唤醒的问题(API说明明确表示会出现这种现象),这两种组合是synchron...
2.另一个缺点可能上面的例子不太明显,当对象的等待队列中有多个线程时,notifyAll无法唤醒指定的线程。 而使用LockSupport的话,我们可以在任何场合使线程阻塞,同时也可以指定要唤醒的线程,相当的方便。 二、使用LockSupport阻塞唤醒线程 LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,...
synchronized(this){consumerThread.resume();}System.out.println("2 通知消费者,消费者线程被唤醒");}/** 由于suspend/resume的调用顺序,导致程序永久死锁 **/publicvoidsuspendResumeDeadLockTest2()throwsInterruptedException {Thread consumerThread=newThread(()->{if(baozidian==null){System.out.println("1 ...