调用notify的线程会发生什么

时间:2014-06-09 17:02:19

标签: java multithreading

当线程调用wait()时,它被阻止并等待一些通知。

但我想知道调用notify()的线程会发生什么。当前线程被阻塞,并在通知点返回执行?

3 个答案:

答案 0 :(得分:4)

当前调用notify()的线程没有任何反应,它继续运行直到它自然结束。

必须在wait()上下文中调用notify()synchronized方法。只要包含synchronized调用的notify()块完成,锁就可用,然后在另一个线程中包含wait()调用的块可以继续。

调用notify只会将等待的线程移回 runnable 线程池。一旦锁定可用,该线程就可以继续。

答案 1 :(得分:1)

通知不会让当前线程进入休眠状态,只会唤醒等待同一个互斥锁的其他线程

通知不会阻止正在执行的线程,并且通知程序和服务员之后会愉快地同时执行。 Notify会随机通知其中一位服务员,如果您有多个线程在等待,并且您想要将所有线程唤醒,则需要使用notifyAll。请注意,由于所有线程仍将处于关键部分,因此它们将被标记为活动状态,但将一次退出一个关键块。

即使没有等待的线程,通知也不会阻止。

请注意,这仅表示线程的状态:两个线程都将处于活动状态,但指令的实际调度取决于:如果您有比cpu更多的线程,则其中一个线程将等待其在cpu上的时间片。

答案 2 :(得分:0)

  • wait()告诉调用线程放弃监视器并进入休眠状态,直到某个其他线程进入同一个监视器并调用notify()。
  • notify()唤醒在同一个对象上调用wait()的第一个线程。

在理想条件下,当线程完成执行以再次返回调用线程时,调用notify()。 但是如果在完成之前使用,则线程将继续正常执行,直到达到自然结束。