【发布时间】:2014-03-28 16:55:26
【问题描述】:
非常感谢!
我在同步 2 个线程时遇到了问题:主线程和从 StepRunner.java 调用的线程。我只需要在下一次迭代开始之前显示迭代结果。
我想要什么:
Please enter step number [1, 2, 3 or 4] or 5 for exit: 2
Please enter natural value for factorial computing: 2
2! = 2
Please enter step number [1, 2, 3 or 4] or 5 for exit:
我不想要的:
Please enter step number [1, 2, 3 or 4] or 5 for exit: 2
Please enter natural value for factorial computing: 2
Please enter step number [1, 2, 3 or 4] or 5 for exit: 2! = 2
为此,我在 StepRunner.java 中有同步块:
public void run() {
thread.start();
synchronized (thread) {
try {
while (thread.isAlive()) { /**Loop is an Oracle's recommendation*/
thread.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
但是为什么方法 wait() 在我的代码的任何地方没有方法 notify() 也能正常工作?
【问题讨论】:
-
您是否检查过循环是否已执行?这只是一个猜测,但也许线程拥有自己的监视器(或者调度程序拥有),因此同步块仅在线程完成后执行并且不再活跃。
-
当线程死亡时它会通知自己。
标签: java multithreading reflection wait notify