Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
try {
thread.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("end");
}
это предложение выкинет:
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
но используйте "thread.join ()" для замены "thread.wait (0)" не выдает никакого исключения.
Загадка
Я запрашиваю исходный код thread.join (): он пойдет по адресу:
while(isAlive)
wait(0);
это означает, что они оба вызывают ожидание (0). но почему результат так отличается?