java 多线程6(线程的·通讯)

问题1:

为什么wait() 和 notify()是Object类中的方法,而不是Thread类中的方法呢?

答:因为锁是任意对象的所以要在Object类中,如果在Thread类中锁对象不是任意的了。


问题2:

为什么wait() 和 notify()必须在同步代码快中或同步函数中使用呢?

答:因为wait() 和 notify()是在有锁的时候才能用,同步代码块中才有锁。


问题3:

为什么wait() 和 notify()必须,由锁对象来调用呢?

答:wait() 和 notify(),以锁对象为标识符建立线程池的。


补充:

wait():一个线程如果执行了wait()方法,那么该线程就会进入一个以锁对象为标识符的线程池中等待。

notify():一个线程如果执行了notify()方法,那么该线程就会唤醒一个以锁对象为标识符的线程池中的一个等待线程。

notifyAll():唤醒线程池中所有的等待线程。

注意:

1.锁对象是相同的才会在相同的线程池中,否则在不同的池子中。

2.wait() 和 notify()必须以锁对象来调用,否则会马上报错的。

原文地址:https://www.cnblogs.com/lifehrx/p/5785535.html