黑马程序员技术交流社区

标题: 关于线程输出的顺序求解释!!!!!!!! [打印本页]

作者: 黑马-张扬    时间: 2012-11-30 14:21
标题: 关于线程输出的顺序求解释!!!!!!!!
本帖最后由 黑马-张扬 于 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,创建一个后台线程应该是这个顺序,后面的会每次运行都回变换,为什么不是我想的这样?
作者: 张学永    时间: 2012-11-30 14:47
你的t是守护线程,这个守护线程在主线程里面,当主线程结束之后,守护线程会自动结束的。
主函数在执行的时候,启动了守护线程,但执行守护线程中的代码内容不是主线程做的事情,而是守护线程做的事。
当主函数执行完System.out.println("主方法运行结束");这句话,主函数结束,守护线程也就结束了,也就不会打印出你想要的结果了。




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