黑马程序员技术交流社区
标题:
关于线程输出的顺序求解释!!!!!!!!
[打印本页]
作者:
黑马-张扬
时间:
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