public static void main(String[] args) {
String resource1 = "ratan jaiswal";
Thread t1 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try {
Thread.sleep(100);
} catch (Exception e) {
}
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 2: locked resource 2");
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
}
};
t1.start();
t2.start();
}
运行此代码后,我得到第16行是带有wait()调用的行
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at ThreadSyncFromMark.deadlock.dead$1.run(dead.java:16)
为什么我会看到此异常,因为我看到这里一切都很好,因为t1在调用wait时拥有resource1的监视器
为什么我会看到此异常,因为我看到这里一切都很好,因为t1在调用wait时拥有resource1的监视器
是的,t1
拥有的监视器resource1
。但是你不是在打电话resource1.wait()
,而是在打电话this.wait()
。
您需要将synchronize
,wait()
并且notify()
全部放在同一个对象(监视器)上,以使事情按应有的方式工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句