第21题-对守护线程的理解
1.定义
[!NOTE]
线程分为用户线程和守护线程,守护线程为所有非守护线程(用户线程)提供服务的线程。例如:GC线程。
2.生命周期
[!NOTE]
当所有用户线程都退出时,守护线程会退出。
3.总结
[!NOTE]
由于守护线程的终止是自身无法控制的,因此千万不要把IO、File等重要操作逻辑分配给它;因为它不靠谱。thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个 IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。在Daemon线程中产生的新线程也是Daemon的。 守护线程不能用于去访问固有资源,比如读写操作或者计算逻辑。因为它会在任何时候甚至在一个操作的中间发生中断。Java自带的多线程框架,比如ExecutorService,会将守护线程转换为用户线程,所以如果要使用后台线程就不能用Java的线程池。