Я понял, что ниже код дает результат как false, но когда мы видим этот экземпляр Thread, поток, который мы создали, задан как демон и по-прежнему работает, то почему метод вызывает thread.isAlive(), возвращает false , давая неправильное впечатление, что «нить завершена и мертва»Почему метод isAlive() экземпляра Thread дает неправильный результат?
public class MyThreads {
private static class MyDaemonThread extends Thread {
public MyDaemonThread() {
setDaemon(true);
}
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
public static void main(String[] args) throws InterruptedException {
Thread thread = new MyDaemonThread();
thread.start();
thread.join();
System.out.println(thread.isAlive());
}
}
У любого есть идея по этому вопросу?
Это не отображается неверно? Поскольку 'join()' будет ждать завершения потока. Также не имеет значения, является ли поток демонами или нет в этом примере. – Kayaman
Последняя строка не будет называться до тех пор, пока поток не завершится из-за использования 'thread.join();', который присоединяется к потоку 'main', чтобы дождаться его конца. – Braj
Неправильное впечатление о том, что «поток завершен и мертв» На самом деле это. 'Join()' заставляет программу ждать завершения потока, поэтому при печати 'thread.isAlive()' поток будет – BackSlash