为什么 wait、notify、notifyAl 方法定义在 Object 类中而不是 Thread 类中?
在Java中,每个对象都有一个内置的锁(也称为监视器或监视器锁)。当一个线程访问一个同步方法或同步块时,它必须先获得该对象的锁。
wait, notify和notifyAll是Object类的方法,而不是Thread类的方法,这是因为这些方法与对象锁相关,而不是与线程自身相关。当调用一个对象的wait()方法时,执行这个方法的线程释放该对象的锁,然后进入等待状态。当另一个线程调用同一个对象的notify()或notifyAll()方法时,正在等待该对象锁的一个或所有线程会被唤醒。
如果这些方法是Thread类的一部分,那么它们就只会对具有该方法的Thread对象产生影响,而不会对等待获取Thread对象锁的其他线程产生影响。在实际应用中,我们经常需要在一个线程中控制其他线程的行为,例如让其他线程等待某个条件满足,或者通知其他线程可以开始执行。因此,将这些方法放在Object类中更加合理,这样所有的对象都有等待和通知的能力,而不仅仅是Thread对象。