wait和notify主要是实现java线程之间的通信机制。java提供的锁都是对象级的,而不是线程级的。
==============================贴一下别人===========
为什么它们不应该在Thread类,(我)的一些想法是:
wait和nofity不是常见的普通java方法或同步工具,在Java中它们更多的是实现两个线程之间的通信机制。
如果不能通过类似synchronized这样的Java关键字来实现这种机制,那么Object类中就是定义它们最好的地方,以此来使任何Java对象都可以拥有实现线程通信机制的能力。
记住synchronized和wait,notify是两个不同的问题域,并且不要混淆它们的相似或相关性。 同步类似竞态条件,是提供线程间互斥和确保Java类的线程安全性的,而wait和notify是两个线程之间的通信机制。
另一个原因:每个对象都可以作为锁
在Java中,为了进入临界区代码段,线程需要获得锁并且它们等待锁可用,它们不知道哪些线程持有锁而它们只知道锁是由某个线程保持,它们应该等待锁而不是知道哪个线程在同步块内并要求它们释放锁。 这个比喻适合等待和通知在object类而不是Java中的线程。
如果wait()方法定义在Thread类中,线程正在等待哪个锁就不明显了