必须在同步块中使用:wait()和notify()方法只能在同步方法或同步代码块中调用,因为它们需要操作共享资源的锁。 持有正确的锁:调用wait()方法的线程必须持有与该对象相关的锁。 二、调用顺序 先获取锁:在调用wait()方法之前,线程必须先获得对象的锁。 调用wait():线程进入等待状态,释放锁。 唤醒线程后重新获取锁:...
obj.notifyAll(); } } } 您没有对方法调用做任何明显错误的事情,但您有一个竞争条件。 虽然在理想世界中,主线程将在所有工作线程到达 wait() 调用后到达其同步块,但不能保证这一点(您明确告诉虚拟机您不想要线程通过使它们成为线程来与主线程按顺序执行)。可能会发生(例如,如果您只有一个内核)线程调度程序决...