当线程调用wait()
时,它被阻止并等待一些通知。
但我想知道调用notify()
的线程会发生什么。当前线程被阻塞,并在通知点返回执行?
答案 0 :(得分:4)
当前调用notify()
的线程没有任何反应,它继续运行直到它自然结束。
必须在wait()
上下文中调用notify()
和synchronized
方法。只要包含synchronized
调用的notify()
块完成,锁就可用,然后在另一个线程中包含wait()
调用的块可以继续。
调用notify只会将等待的线程移回 runnable 线程池。一旦锁定可用,该线程就可以继续。
答案 1 :(得分:1)
通知不会让当前线程进入休眠状态,只会唤醒等待同一个互斥锁的其他线程
通知不会阻止正在执行的线程,并且通知程序和服务员之后会愉快地同时执行。 Notify会随机通知其中一位服务员,如果您有多个线程在等待,并且您想要将所有线程唤醒,则需要使用notifyAll。请注意,由于所有线程仍将处于关键部分,因此它们将被标记为活动状态,但将一次退出一个关键块。
即使没有等待的线程,通知也不会阻止。
请注意,这仅表示线程的状态:两个线程都将处于活动状态,但指令的实际调度取决于:如果您有比cpu更多的线程,则其中一个线程将等待其在cpu上的时间片。
答案 2 :(得分:0)
在理想条件下,当线程完成执行以再次返回调用线程时,调用notify()。 但是如果在完成之前使用,则线程将继续正常执行,直到达到自然结束。