在线程thread执行完后,JVM会执行方法notifyAll(),实例thread会被回收,主线程不会获取到该实例的锁而是直接打印“所有子线程执行完毕”。
synchronized (thread) {
thread.wait();
}
System.out.println("所有子线程执行完毕");
假设等价代码这样改写:
synchronized (thread) {
thread.wait();
System.out.println("等价代码执行完毕");
}
System.out.println("所有子线程执行完毕");
由于实例thread执行完毕被回收,主线程再也无法获得实例thread的锁,因此会永远处于状态Blocked。