一、守护线程(Daemon Thread)
为用户线程提供便利服务的线程就是守护线程,比如JVM中的垃圾回收器就是一种守护线程。守护线程不止是有JVM自行创建的线程,程序员也可以通过setDaemon(true)的方式,将用户线程转化为守护线程。当然,既然守护线程的唯一作用是为用户线程提供便利服务,所以当程序中仅存在守护线程时,守护线程就没有存在的必要了,JVM会关闭剩下的守护线程并且推出该进程。
二、用户线程(User Thread)
所谓的用户线程就是我们平时建议的有着自己专门作用的线程,也就是非守护线程。我们常见的main方法也同样是用户线程的一员。
public class DaemonThreadTest { public static void main(String[]args){ Thread t = new Thread( new Runnable() { @Override public void run() { try { while (true) System.out.println("这是守护线程"); }catch (Exception e){ e.printStackTrace(); } } } ); // t.setDaemon(true); t.start(); System.out.println(t.isAlive()); } }
通过这段代码的执行,我们可以发现守护线程只能为线程提供服务,无法做输入输出操作。