为什么notify(),notifyall()和wait()在对象类中而不在Thread类中?

时间:2014-08-15 06:30:11

标签: java

在对象类中而不是在Thread类中声明notify(),notifyall()和wait()有什么用?

2 个答案:

答案 0 :(得分:1)

线程使用共享对象彼此同步。这个方法被调用的是这个共享对象,它不是一个线程。顺便说一句,文档明确建议永远不要在Thread实例上使用这些方法,因为这会混淆事情。

例如,让我们说你有一个线程在自助餐中添加碟形,并且有几个线程试图从这个自助餐中取出菜肴。自助餐将是同步点:填充线程将在共享自助餐上调用notifyAll()一旦它添加了一道菜,以唤醒等待自助餐的线程。

答案 1 :(得分:0)

这些方法在Object中为线程提供同步的方法(例如通过锁):

synchronize(lock) {
    lock.wait(); // Will block until lock.notify() is called
}

// Later on the same day in another thread...
synchronize(lock) {
    lock.notify(); // Will wake up lock.wait()
}

此行为不是特定于线程的,因此不在Thread类