A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

先说明一下什么是后台线程,后台线程又叫守护线程,我们可以将后台线程和后台进程进行对比去理解,后台进程相信大家都不陌生,在操作系统启动的时候,会有很多的后台进程跟着启动,这些进程一般不会被用户察觉到,但却默默的随着系统启动了,比如防火墙,资源管理器。而后台线程有些类似于后台进程,它可以和普通线程一样执行run方法中的代码,但JVM对后台线程的处理却和普通线程不同,我用下面的代码来说明JVM对后台线程是如何对待的:
  1. /*
  2. * 一段简单的代码来说明Java虚拟机对于后台线程的处理方式
  3. */
  4. public class DeamonThreadDemo {
  5.         public static void main(String[] args) throws InterruptedException {
  6.                 //定义一个线程
  7.                 Thread myThread = new Thread(new Runnable() {
  8.                        
  9.                         @Override
  10.                         public void run() {
  11.                                 try {
  12.                                         while(true) {
  13.                                                 System.out.println("我是一个后台线程");
  14.                                         }
  15.                                 } catch (Exception e) {
  16.                                         System.out.println("我知道这里没有异常");
  17.                                 } finally {
  18.                                         System.out.println("我是后台线程的finally语句,JVM会不会执行我?");
  19.                                 }
  20.                         }
  21.                 });
  22.                 //将myThread设置为后台线程
  23.                 myThread.setDaemon(true);
  24.                 myThread.start();
  25.                
  26.                 System.out.println(Thread.currentThread().getName() + "結束");
  27.         }
  28. }
复制代码

上面代码的运行结果如下:
main結束
我是一个后台线程
我是一个后台线程
我是一个后台线程
我是一个后台线程
我是一个后台线程
我是一个后台线程

结果分析:每次运行的结果不一定相同,但运行结果的关键在于,finally语句块中的语句并没有被虚拟机调用执行,这恰好表明了JVM在对待后台线程时的处理方式是:当所有非后台线程执行完毕,JVM就会退出,即便此时仍然有后台进程在运行。

希望能够帮助大家理解什么是后台线程。

1 个回复

倒序浏览
风华正茂 来自手机 中级黑马 2015-8-15 17:59:31
沙发
楼主分析得不错,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马