在学习线程时,遇到一个问题:
为什么注释处写在上面和删除掉会影响程序显示结果?请高手帮助回答下,先谢了。
代码如下:class ThreadLife
{
public static void main(String [] args)
{
ThreadTest tt=new ThreadTest();
new Thread(tt).start();
for (int i=1;i<=50;i++)
{
if(i==25)
{
tt.b=false;
}
system.out.println("main Thread");//此处为什么会影响编程结果
}
}
}class ThreadTest implements Runnable
{
boolean b=true;
public void run()
{
while (b)
{
System.out.println(Thread.currentThread().getName());
}
}
}
为什么注释处写在上面和删除掉会影响程序显示结果?请高手帮助回答下,先谢了。
代码如下:class ThreadLife
{
public static void main(String [] args)
{
ThreadTest tt=new ThreadTest();
new Thread(tt).start();
for (int i=1;i<=50;i++)
{
if(i==25)
{
tt.b=false;
}
system.out.println("main Thread");//此处为什么会影响编程结果
}
}
}class ThreadTest implements Runnable
{
boolean b=true;
public void run()
{
while (b)
{
System.out.println(Thread.currentThread().getName());
}
}
}
system小写了,应该大写
i/o操作要比cpu工作速度慢很多你承认吧?
因为运行速率的问题,所以输出会不一样。
无注释这句时,什么都不会打印出来;
有注释这句时,会出现主线程和ThreadTest线程轮流执行的结果(这种情况是正常的,就是想知道为什么无注释这句时,什么都不会打印出来?)
如下:
main Thread
main Thread
main Thread
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
main Thread
解答如下:
执行时间的问题,你没有加(system.out.println("main Thread");//此处为什么会影响编程结果 )这行代码时,程序很快就执行完了,根本没有时间去运行public void run()
你加了system.out.println("main Thread");打印,延迟了程序执行时间,所以public void run()
得到执行了.你看到了打印结果
你把代码做如下修改
for (int i=1;i <=500000000;i++)
{
if(i==25000000)
{
tt.b=false;
}
// System.out.println("main Thread");//此处为什么会影响编程结果
}
就能看到打印的
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0