在 Java 中,我们可以在未获取锁的情况下调用 wait() 方法吗?
javaobject oriented programmingprogramming更新于 2025/6/22 8:44:17
不可以,我们无法在未获取锁的情况下调用 wait() 方法。在 Java 中,一旦获取了锁,我们就需要对该对象调用 wait() 方法(带超时或不带超时)。如果我们尝试在未获取锁的情况下调用 wait() 方法,则可能会抛出 java.lang.IllegalMonitorStateException。
示例
public class ThreadStateTest extends Thread {
public void run() {
try {
wait(1000);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
public static void main(String[] s) {
ThreadStateTest test = new ThreadStateTest();
test.start();
}
}
在上面的例子中,我们需要在不获取锁的情况下调用 wait() 方法,因此它在运行时会生成 IllegalMonitorStateException 。为了解决这个问题,我们需要在调用 wait() 方法之前获取锁,并将 run() 方法声明为 synchronized
输出
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException at java.lang.Object.wait(Native Method) at ThreadStateTest.run(ThreadStateTest.java:4)
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

