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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-张扬 于 2012-11-30 15:28 编辑

// ////////////////////////////////////////////////////////
// J_ThreadDaemon.java
// ////////////////////////////////////////////////////////
public class J_ThreadDaemon extends Thread
{
     public void run( )
     {
         for(int i=0; true; i++)
         {
             System.out.println("线程在运行: " + i);
             try
             {
                 sleep((int)(Math.random( ) * 1000));
             }
             catch( InterruptedException e )
             {
                 System.err.println(e);
             } // try-catch结构结束
         } // for循环结束
     } // 方法run结束
     
     public static void main(String args[ ])
     {
         J_ThreadDaemon t = new J_ThreadDaemon( );
         t.setDaemon(true);
         t.start( );
         if (t.isDaemon( ))
             System.out.println("创建一个后台线程");
         else
             System.out.println("创建一个用户线程");
         System.out.println("主方法运行结束");
     } // 方法main结束
} // 类J_ThreadDaemon结束
输出:
创建一个后台线程
线程在运行: 0
主方法运行结束
按照我的理解应该是 t.start( );之后就会执行Run函数,输出:线程在运行: 0,创建一个后台线程应该是这个顺序,后面的会每次运行都回变换,为什么不是我想的这样?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

1 个回复

正序浏览
你的t是守护线程,这个守护线程在主线程里面,当主线程结束之后,守护线程会自动结束的。
主函数在执行的时候,启动了守护线程,但执行守护线程中的代码内容不是主线程做的事情,而是守护线程做的事。
当主函数执行完System.out.println("主方法运行结束");这句话,主函数结束,守护线程也就结束了,也就不会打印出你想要的结果了。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马