先说明一下什么是后台线程,后台线程又叫守护线程,我们可以将后台线程和后台进程进行对比去理解,后台进程相信大家都不陌生,在操作系统启动的时候,会有很多的后台进程跟着启动,这些进程一般不会被用户察觉到,但却默默的随着系统启动了,比如防火墙,资源管理器。而后台线程有些类似于后台进程,它可以和普通线程一样执行run方法中的代码,但JVM对后台线程的处理却和普通线程不同,我用下面的代码来说明JVM对后台线程是如何对待的:
- /*
- * 一段简单的代码来说明Java虚拟机对于后台线程的处理方式
- */
- public class DeamonThreadDemo {
- public static void main(String[] args) throws InterruptedException {
- //定义一个线程
- Thread myThread = new Thread(new Runnable() {
-
- @Override
- public void run() {
- try {
- while(true) {
- System.out.println("我是一个后台线程");
- }
- } catch (Exception e) {
- System.out.println("我知道这里没有异常");
- } finally {
- System.out.println("我是后台线程的finally语句,JVM会不会执行我?");
- }
- }
- });
- //将myThread设置为后台线程
- myThread.setDaemon(true);
- myThread.start();
-
- System.out.println(Thread.currentThread().getName() + "結束");
- }
- }
复制代码
上面代码的运行结果如下:
main結束
我是一个后台线程
我是一个后台线程
我是一个后台线程
我是一个后台线程
我是一个后台线程
我是一个后台线程
结果分析:每次运行的结果不一定相同,但运行结果的关键在于,finally语句块中的语句并没有被虚拟机调用执行,这恰好表明了JVM在对待后台线程时的处理方式是:当所有非后台线程执行完毕,JVM就会退出,即便此时仍然有后台进程在运行。
希望能够帮助大家理解什么是后台线程。
|
|