黑马程序员技术交流社区

标题: 关于守护线程小问题 [打印本页]

作者: 张洪慊    时间: 2013-3-19 21:30
标题: 关于守护线程小问题
本帖最后由 张洪慊 于 2013-3-22 15:10 编辑
  1. class StopThread implements Runnable
  2. {
  3.   private boolean flag=true;
  4.    public synchronized void run()
  5.    {
  6.         while(flag)
  7.            {
  8.                
  9.                 System.out.println(Thread.currentThread().getName()+"....run...");
  10.            }
  11.    }
  12.    public void changeFlag()
  13.    {
  14.      flag=false;
  15.    
  16.    }

  17. }
  18. class setDaemonDemo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.           StopThread s=new StopThread();
  23.           Thread t1=new Thread(s);
  24.           Thread t2=new Thread(s);
  25.           t1.setDaemon(true);
  26.           t2.setDaemon(true);//on为true 该线程被标记为守护线程
  27.           t1.start();
  28.           t2.start();
  29.       int x=0;
  30.           while(true)
  31.           {
  32.             if(x++==60)
  33.                   {
  34.               
  35.                         break;
  36.                   }
  37.            System.out.println(Thread.currentThread().getName()+"...."+x);
  38.           }
  39.           System.out.println(Thread.currentThread().getName()+"....over");
  40.         }
  41. }
复制代码

主线程已经"over",守护线程又执行了一段?难道说,JVM退出需要一点时间?? 好吧,求详解.


作者: 李尧    时间: 2013-3-19 22:23
我想问这个...mark一下..坐等高人解答.
作者: 张洪慊    时间: 2013-3-19 22:30
李尧 发表于 2013-3-19 22:23
我想问这个...mark一下..坐等高人解答.

顶啊,骚年~~~~(*^__^*) 嘻嘻……
作者: 李尧    时间: 2013-3-19 23:49
张洪慊 发表于 2013-3-19 22:30
顶啊,骚年~~~~(*^__^*) 嘻嘻……

哥们,还是没人来回答么...难道我们钻牛角尖了...
作者: 黄玉昆    时间: 2013-3-22 13:11
我的理解:
1、守护线程(也称后台线程)结束,主线程也会结束的,JVM就会自动退出的。正如你所问的,主线程结束了,是不是就表明守护线程一定是结束了呢?
2、这是不一定的,而且,你并不知道主线程真的就结束了,你只是看到了main这个线程打印的代码是结束了,但是在程序中,可能存在这很多的线程,并没有显示在控制台上,只是你不知道而已,所以你看不见的。其实就是说还有一些内在的程序在运行,主线程并没有结束。所以,直到守护线程结束了,才真正的运行完了。
3、如何查看呢?我从网上看到了一些别人介绍的方法:
可以使用Eclipse的调试功能,在main方法中打入断点,然后调试启动,查看线程相关信息。之后按F8让方法运行,会发现main线程结束。但还存在其他很多线程。具体内容我也没试过,仅供参考。你可以试试。
希望对你有帮助。你这个问题问的比较好的,可能好多人没有注意到,或者最近大家忙着入学考试,所以,如果没有人帮你回答,你可以在网上搜索一下,尽量不要让问题搁置,否则就会留下一个小隐患的,如果你找到了相关答案,希望也能给大家分享一下,谢谢
顺便提醒一下:如果你的问题解决了,请尽快将帖子分类改为“已解决”,谢谢
作者: 黄玉昆    时间: 2013-3-22 13:13
李尧 发表于 2013-3-19 23:49
哥们,还是没人来回答么...难道我们钻牛角尖了...

希望这个答案能对你也有帮助,如果再遇到类似自己发帖没人回答的情况,你可以到网上搜索一下相关的答案,千万不要让自己错过一个知识点哦,希望对你有用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2