[英]what is the behavior of java after returning to a synchronized block after notify on an object
我知道在我们对一个对象调用wait()
,该对象的锁将释放以允许另一个线程通过同步块提供该锁并调用notify()
。 在我们进入我们调用wait()
方法的同步块之前,我们获取锁并调用wait()
。
但是在wait()
该方法释放了锁。
现在我的问题是在另一个线程中调用notify()
之后,等待该对象的线程是否再次获取锁。
下面是一个简单的代码:
Object obj = new Object();
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
afterWait();
}
是jvm执行afterWait()
方法时获取对象的锁与否,因为它也在同步块中。
在 Java 中,监视器是根据 Mess 的语义实现的。 这意味着当当前线程需要等待时,它会释放监视器并加入其他等待线程以再次获取监视器。 所写的示例并不安全,因为 wait 应该在循环中检查某些条件以再次等待,因为 Java 不保证只有在notify()
或notifyAll()
方法的情况下才会唤醒线程。 它可能适用于您的开发环境,但在另一个环境中失败。 此外, notify()
方法不保证线程会唤醒并获得锁,因为它可能无法获得信号,因此执行notifyAll()
以唤醒所有等待锁的线程是安全的。
我是 Stack Overflow 的新手,所以我不确定我的共享知识是否直接针对问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.