public class WaitMain {
public volatile static int i = 0;
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(){
public void run(){
for (i = 0; i < 1000000; i++);
}
};
t1.start();
synchronized (t1){
t1.wait();
}
System.out.println(i);
}
}
在上面的代码中,我没有调用任何notify或notifyAll方法,但是主线程仍然被唤醒并正常执行。我想知道为什么。谢谢。
这方面的描述隐藏在Thread.join()
的文档中:
当线程终止时,调用
this.notifyAll
方法。建议应用程序不要在Thread实例上使用wait
、notify
或notifyAll
。
结果是这样的:
- main方法创建一个新的线程
t1
并启动它 然后调用 - 唤醒主线程
t1.wait()
线程t1
在一段时间后终止并隐式调用t1.notifyAll()
,根据文档