我們能不對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)
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP