2015-08-09 133 views
0

这是一个非常简短的问题,但无法从任何地方得到答案。守护程序线程不止一个?

可以创建多个守护线程?

+2

是的,为什么不尝试呢? – SMA

+1

是的,没有什么可以阻止这一点。 –

+0

真的很抱歉,我实际上尝试过并得到'java.lang.IllegalThreadStateException'。所以我认为只有一个守护线程被允许。但收到你的回复后,我再次尝试,发现我犯了一个愚蠢的错误。我在启动线程后调用setDaemon()。谢谢! – Jenix

回答

2

是的。你可以简单的代码测试它像

Thread t1 = new Thread(()->{ 
    while(true){ 
     System.out.println("daemon1"); 
     try { 
      TimeUnit.SECONDS.sleep(1); 
     } catch (Exception e) {} 
    } 
}); 
t1.setDaemon(true); 

Thread t2 = new Thread(()->{ 
    while(true){ 
     System.out.println("daemon2"); 
     try { 
      TimeUnit.SECONDS.sleep(2); 
     } catch (Exception e) {} 
    } 
}); 
t2.setDaemon(true); 

t1.start(); 
t2.start(); 

try { 
    TimeUnit.SECONDS.sleep(5); 
} catch (Exception e) {} 
System.out.println("main thread stopped"); 

输出:

daemon1 
daemon2 
daemon1 
daemon2 
daemon1 
daemon1 
daemon1 
daemon2 
daemon1 
main thread stopped 

正如你看到的两个守护进程洁具在同一时间运行。此外,由于没有其他非守护线程,应用程序停止。

+0

谢谢Pshemo! – Jenix