在下面的代码中,为什么wait()之后的部分不会执行。 即使在主线程拥有锁的对象中存在notify()。
public class MainClass {
public static void main(String[] args) {
Demo dm = new Demo();
dm.add();
synchronized (dm) {
try {
System.out.println("going to wait");
dm.wait();
System.out.println("after wait");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(dm.result);
}
}
}
class Demo {
int result;
public void add(){
System.out.println("in demo");
synchronized (this) {
System.out.println("in demo syn block");
for(int i=0;i<=10;i++) {
result=i+result;
}
System.out.println("IN demo:"+result);
notify();
}
}
}
}
我需要知道的是 - 为什么即使notify()在那里,wait()之后的代码也没有执行。如果我尝试使用线程解决这个问题,那么wait()会自动退出它的状态。
答案 0 :(得分:0)
您打电话的顺序是错误的。
Demo
主题调用main
类的Demo
方法。dm
对象并完成任务并完成。 wait
对象并开始等待它。 那么发生什么事这是你在等待,没有人在通知。所以你的代码永远不会在ElementFinder
语句