我们能不对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)

更新于: 2023 年 11 月 27 日

浏览数:473

开启您的 职业生涯

完成课程获得认证

开始学习
广告