我们能不对Java中的锁进行获取就调用wait()方法吗?
不能,我们不能在未获取锁的情况下调用 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() 方法已同步。
输出
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException at java.base/java.lang.Object.wait(Native Method) at ThreadStateTest.run(ThreadStateTest.java:4)
广告