【发布时间】:2016-06-24 16:52:49
【问题描述】:
在下面的代码中,为什么 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() 会自动退出它的状态。
【问题讨论】:
-
waits 后面的notify不受影响。目前尚不清楚您要在这里做什么。您的程序是单线程的。 -
wait() 和 notify() 不用于线程实例。如果我尝试使用线程,那么 wait() 会自动进入等待状态
-
您可以拥有一个多线程程序,但不使用
wait和notify及其对应的Thread对象。 -
你能做到吗??我很困惑....昨天我试过了
-
Re,“如果我尝试使用线程解决这个问题...”如果您尝试解决 what?你想让程序做什么?