我知道线程wait()
和notify()
的机制,但我无法理解为什么wait()
和notify()
方法应该在synchronized
中块?这是强制性的吗?
提前致谢!
答案 0 :(得分:4)
在调用wait / notify时强制同步:是
为什么?:请注意不需要同步。这意味着线程A可以在另一个线程B正在调用wait()(在同一个对象上)的同时完全同时调用notify()。假设线程B执行了 wait()方法的一部分并且被上下文切换以服务线程A.因此等待的内部数据结构现在可能处于损坏状态。现在 notify()方法基本上适用于相同的数据结构,现在处于无效状态。因此整个等待/通知可以进行折腾。同步保证没有其他方法可以调用wait / notify,如果已经打开了其中一个方法。