回答这个问题之前,首先我们要知道哪些和线程有关的方法被封装在Object
类中。
Object类中和线程有关的方法
void notify()
唤醒一个在此对象监视器上等待的线程。
被唤醒的线程是随机的,不确定的。
void notifyAll()
唤醒在该对象上等待的所有线程。
之后这些线程会重新获取该对象的锁,最终只有一个对象能获取锁。
void wait()
让当前线程进入等待状态。直到其他线程调用此对象的 notify()
方法或 notifyAll()
方法。
void wait(long timeout)
让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify()
方法或 notifyAll()
方法,或者超过参数 timeout
设置的超时时间。
果 timeout
参数为 0,则不会超时,会一直进行等待,类似于 wait()
方法。
void wait(long timeout, int nanos)
与 wait(long timeout)
方法类似,多了一个 nanos
参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos
纳秒。。
解答
因为这些方法与其说和线程有关系,实际上都是用来操作和锁有关的方法。
notify()
和notifyAll()
方法用于唤醒等待该锁的线程。(和该锁有关的线程)
wait()
方法则是立刻始放锁,然后让当前线程进入等待状态。(释放这把锁)
而每一个Object
对象都可以成为锁。因此这些方法都被封装在Object
类中。