线程分为两种,用户线程和守护线程
其实守护线程和用户线程区别不大,可以理解为特殊的用户线程。特殊就特殊在如果程序中所有的用户线程都退出了,那么所有的守护线程就都会被杀死,很好理解,没有被守护的对象了,也不需要守护线程了。
用户线程的启动就是线程调用start方法,就是我们平时使用new Thread()对象,或者实现Runable()接口创建的线程,当然也可以直接通过匿名内部类启动。
启动守护线程也有两种方法,先来看看怎么启动守护线程 。
最常用的一种是通过将用户线程转换为守护线程来启动线程从而启动守护线程。thread.setDaemon(true),这样可以设置该线程为守护线程,值得注意的是必须在线程启动start()方法之前设置。
还有一个启动守护线程的方法就是利用Timer和TimerTask。Timer是JDK提供的定时器工具,使用时会在主线程之外单独起一个线程执行指定的任务。Timer timer = new Timer()启动的是用户线程,而Timer timer = new Timer(true)启动的就是守护线程。TimerTask是一个实现了Runnable接口的抽象类,配合Timer使用可以看做被Timer执行的任务,即启动的线程。
还有一个值得注意的是守护线程中产生的线程都是守护线程