为什么和线程有关的方法会被封装在Object类中

回答这个问题之前,首先我们要知道哪些和线程有关的方法被封装在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类中。

猜你喜欢

转载自blog.csdn.net/qq_42068856/article/details/125604560