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