在 Java 中,我们可以在未获取锁的情况下调用 wait() 方法吗?
javaobject oriented programmingprogramming更新于 2024/5/9 19:02:00
不可以,我们无法在未获取锁的情况下调用 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)