你关键的代码也要贴点,要不谁知道你的错误发生在哪?你明白notify和notifyAll的区别,也就基本明白了为啥这样;notify选择是任意性的,所以当线程大于2时,若唤醒的线程不具备条件时又会wait,这样所有的线程都在wait,就是你说的程序就卡在那里了;而notifyAll会唤醒在此对象监视器上等待的所有线程,也就是说总有一个线程会满足你的if或while条件,因此总会有一个线程会继续运行,并nofityAll,所以程序没问题;虽然不知道你把sleep放在哪里,既然没问题,我想你的sleep放在if或while条件之后,但还没有引起其它线程的if或while条件满足,当这个线程sleep 1秒,对于CPU来说,足以让所有的其它线程都调用run方法,也就是其它线程都会进入wait了;当你这个线程再次运行时,notify哪个线程都会唤醒其中一个了;