java - 调用 notify() 与结束同步块 Java
问题描述
我是线程编程的新手,我有一个像下面这样的困惑。让我们来看看下面的代码块。
synchronized(obj)
{
//do operations
//obj.notify();
//post operations
// last statement
}
现在直到“最后一条语句”执行,即使在调用 notify() 之后,obj 的监视器也不会被释放。那么值得在这里调用 notify() 吗?因为反正当同步块退出时,不等于调用notify()。
解决方案
不,当您退出同步块时,既notify()
不会调用也不会notifyAll()
调用所有其他等待同一个锁调用的线程wait()
将不会被唤醒。
以下是关于在离开同步块时自动调用notifyAll()
Automatic notify()/notifyAll()的一些缺点