0

我在主方法中创建了两个线程,比如 t1 和 t2。t1 是用户线程,有 10 个打印语句的循环 t2 是守护线程,有 10 个打印语句的循环

main 启动两个线程并有一个打印语句。然而,即使在 main 退出后,t2 仍然继续与 t1 并行运行,即使在 main 结束后也是如此。即使在创建它的线程退出后,守护线程也可以运行。

请更新谢谢tejinder

4

2 回答 2

1

即使在创建它的线程退出后,守护线程也可以运行。

是的。守护线程将一直运行,直到它退出或所有非守护线程都完成并且 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;
      }
 }
于 2013-05-29T13:20:57.200 回答
0

是的,从你开始线程的地方,线程独立运行。

于 2013-05-29T13:54:45.513 回答