我們能不對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

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告