java中线程的wait()和notify()方法的多线程处理 2 月,2 周 Questions & Answers 699 我知道线程的wait()和notify()的机制,但我无法理解为什么wait()和notify()方法应该在synchronized块中?这是强制性的吗 提前谢谢
# 1 楼答案 在调用wait/notify时必须同步:Yes 为什么强>:考虑不需要同步。这意味着一个线程a可以在另一个线程B(在同一个对象上)调用wait()的同时调用notify()。假设线程B已经执行了wait()方法的一部分,并且被上下文切换为服务线程A。那么wait的内部数据结构现在可能处于损坏状态。现在,notify()方法基本上在相同的数据结构上工作,现在处于无效状态。因此,整个等待/通知过程可能会发生变化。同步可以保证,如果已经有对其中一个方法的调用,则其他方法无法调用wait/notify
# 1 楼答案
在调用wait/notify时必须同步:Yes
为什么强>:考虑不需要同步。这意味着一个线程a可以在另一个线程B(在同一个对象上)调用wait()的同时调用notify()。假设线程B已经执行了wait()方法的一部分,并且被上下文切换为服务线程A。那么wait的内部数据结构现在可能处于损坏状态。现在,notify()方法基本上在相同的数据结构上工作,现在处于无效状态。因此,整个等待/通知过程可能会发生变化。同步可以保证,如果已经有对其中一个方法的调用,则其他方法无法调用wait/notify