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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张洪慊 高级黑马   /  2013-3-19 21:30  /  1629 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张洪慊 于 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-22 13:13

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

5 个回复

倒序浏览
我想问这个...mark一下..坐等高人解答.
回复 使用道具 举报
李尧 发表于 2013-3-19 22:23
我想问这个...mark一下..坐等高人解答.

顶啊,骚年~~~~(*^__^*) 嘻嘻……
回复 使用道具 举报
张洪慊 发表于 2013-3-19 22:30
顶啊,骚年~~~~(*^__^*) 嘻嘻……

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

点评

谢了,昆哥...  发表于 2013-3-22 14:58
回复 使用道具 举报
李尧 发表于 2013-3-19 23:49
哥们,还是没人来回答么...难道我们钻牛角尖了...

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

点评

thanks!  发表于 2013-3-22 16:17
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马