我在main方法中创建了两个线程,比如说t1和t2。 t1是用户线程,具有10个打印语句的循环 t2是守护程序线程,有一个包含10个打印语句的循环
main启动两个线程并且只有一个print语句。 然而即使在主要出口之后,即使在主要结束之后,t2仍然继续与t1平行运行。 即使在创建它的线程退出后,守护程序线程也可以运行。
请更新 谢谢 tejinder
答案 0 :(得分:1)
即使在创建它的线程退出后,守护程序线程也可以运行。
是。守护程序线程将一直运行,直到它退出或所有非守护程序线程完成并且JVM终止。启动子线程的父线程的操作或终止根本不会影响子线程。
如果要停止子线程,则父线程应该interrupt()
,然后join()
。类似的东西:
Thread child = new Thread(new MyRunnable());
child.start();
...
child.interrupt();
child.join();
请记住interrupt()
不取消该帖子。它只会使Thread.sleep()
,Object.wait()
等方法抛出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;
}
}
答案 1 :(得分:0)
是的,从哪里开始线程,线程独立运行。