同时创建用户和守护程序线程不起作用

时间:2013-05-29 13:19:59

标签: java multithreading daemon

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

main启动两个线程并且只有一个print语句。 然而即使在主要出口之后,即使在主要结束之后,t2仍然继续与t1平行运行。 即使在创建它的线程退出后,守护程序线程也可以运行。

请更新 谢谢 tejinder

2 个答案:

答案 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)

是的,从哪里开始线程,线程独立运行。