Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。
守护线程的作用和特点:
Daemon 作用是为其他线程提供便利服务,守护线程最典型的应用就是 GC (垃圾收集器)。
只要当前 JVM 实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;
只有当最后一个非守护线程结束是,守护线程随着 JVM 一同结束工作。
守护线程的创建:
Java 可以通过对线程创建后运行前 Thread.setDaemon(true);
设置使其成为守护线程。
守护线程注意事项:
- thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
- 在Daemon线程中产生的新线程也是Daemon的。
- 不要认为所有的应用都可以分配给Daemon来进行服务,比如读写操作或者计算逻辑。
写java多线程程序时,一般比较喜欢用java自带的多线程框架,比如ExecutorService,但是java的线程池会将守护线程转换为用户线程,所以如果要使用后台线程就不能用java的线程池。