Java面试问题之三十六
请谈谈你对Java后台线程的理解以及它有和特点。
答:所谓的后台线程就是指为其他线程服务的线程,也称为守护线程。比如,Java虚拟机中的垃圾回收线程就是典型的后台线程,它负责回收其他线程不再使用的内存资源。后台线程的特点是:后台线程与前台线程相伴相随,通常情况下只有所有前台线程都结束生命周期,后台线程才会结束生命周期。只要有一个前台线程还没有运行结束,后台线程就不会结束生命周期。主线程在默认情况下是前台线程,由前台线程创建的线程在默认情况下也是前台线程。调用Thread类的setDaemon(true)方法,就可以把一个线程设置为后台线程。Thread类的isDaemon()方法用来判断一个线程是否是后台线程。
知识扩展:
在使用Java后台线程时,应该非常注意以下几点:
(1)Java虚拟机所能保证的是,当所有前台线程都运行结束时,如果后台线程还在运行,Java虚拟机就会终止后台线程。此外,后台线程是否一定要在前台线程之后结束生命周期,还要取决于程序的实现。
(2)只有在线程启动前,也就是说在调用start()方法之前,才能把一个线程设置为后台线程。如果线程启动以后再调用这个线程的setDaemon(true)方法,则会抛出IllegalThreadStateException异常。
(3)通常情况下,由前台线程创建的新线程默认情况下依然是前台线程,而由后台线程创建的线程在默认的情况下依然是后台线程。