Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。
守护线程:守护线程指提供某种服务的线程,当系统中只有此线程时,程序就终止了。
将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。
在Daemon线程中产生的新线程也是Daemon的。
守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断。
thread.setDaemon(true)必须在thread.start()之前设置
例子:
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 Thread t1 = new Thread(){ 4 public void run(){ 5 try { 6 Thread.sleep(1000); 7 } catch (InterruptedException e) { 8 // TODO Auto-generated catch block 9 e.printStackTrace(); 10 } 11 for(int i=0; i<1000; i++){ 12 System.out.println("守护线程"); 13 } 14 } 15 }; 16 Thread t2 = new Thread(){ 17 public void run(){ 18 try { 19 Thread.sleep(1000); 20 } catch (InterruptedException e) { 21 // TODO Auto-generated catch block 22 e.printStackTrace(); 23 } 24 for(int i=0; i<5; i++){ 25 System.out.println("非守护线程"); 26 } 27 } 28 }; 29 30 t1.setDaemon(true);//t1设置为守护线程 31 t1.start(); 32 t2.start(); 33 }
结果:
//结果守护线程并不会执行1000次,非守护线程结束后,守护线程随之结束,守护线程可以作为服务存在,典型应用时垃圾回收器
1 非守护线程 2 非守护线程 3 非守护线程 4 非守护线程 5 非守护线程 6 守护线程 7 守护线程 8 守护线程 9 守护线程 10 守护线程 11 守护线程 12 守护线程 13 守护线程 14 守护线程 15 守护线程 16 守护线程 17 守护线程 18 守护线程 19 守护线程