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