我在主方法中创建了两个线程,比如 t1 和 t2。t1 是用户线程,有 10 个打印语句的循环 t2 是守护线程,有 10 个打印语句的循环
main 启动两个线程并有一个打印语句。然而,即使在 main 退出后,t2 仍然继续与 t1 并行运行,即使在 main 结束后也是如此。即使在创建它的线程退出后,守护线程也可以运行。
请更新谢谢tejinder
我在主方法中创建了两个线程,比如 t1 和 t2。t1 是用户线程,有 10 个打印语句的循环 t2 是守护线程,有 10 个打印语句的循环
main 启动两个线程并有一个打印语句。然而,即使在 main 退出后,t2 仍然继续与 t1 并行运行,即使在 main 结束后也是如此。即使在创建它的线程退出后,守护线程也可以运行。
请更新谢谢tejinder
即使在创建它的线程退出后,守护线程也可以运行。
是的。守护线程将一直运行,直到它退出或所有非守护线程都完成并且 JVM 终止。启动子线程的父线程的操作或终止,完全不影响子线程。
如果要停止子线程,则父线程应该停止interrupt()
它,然后再join()
使用它。就像是:
Thread child = new Thread(new MyRunnable());
child.start();
...
child.interrupt();
child.join();
请记住,interrupt()
不会取消线程。它只是让方法像Thread.sleep()
,Object.wait()
和其他 throw InterruptedException
。您的子线程应该执行以下操作:
while (!Thread.currentThread().isInterrupted()) {
...
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// catching the exception clears the interrupt bit so we need to set it again
Thread.currentThread().interrupt();
// we probably want to quit the thread if we were interrupted
return;
}
}
是的,从你开始线程的地方,线程独立运行。