在学习线程时,遇到一个问题: 
为什么注释处写在上面和删除掉会影响程序显示结果?请高手帮助回答下,先谢了。 
代码如下: 
Java codeclass 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());
        }
    }
}         

解决方案 »

  1.   

    我运行了,没发现有不对的地方啊
    system.out.println("main Thread");//此处为什么会影响编程结果
    System的S要大写!
      

  2.   

    多线程操作本来就有很多的不确定因素,得看CPU如何线程分配时间
    在加上你在主线程上少执行了一句话,当然对另一个线程有影响啦^
      

  3.   

    我运行了,没有发现问题啊·
    system.out.println("main Thread");//此处为什么会影响编程结果
    这里:是大写的S
      

  4.   

    system是笔误,不好意思
    无注释这句时,什么都不会打印出来;
    有注释这句时,会出现主线程和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
      

  5.   

    谢谢提醒。
    我在里面让主线程,睡了一小会儿就有我想的结果了,呵if(i==25)
    {
            tt.b=false;
    }
    try
    {
    Thread.sleep(10);
    }catch(Exception e)
    {
    System.out.println(e.getMessage());
    }

    //System.out.println("main Thread");我还想请问一下,这个问题能反应“只要主线程结束,其它线程都要结束么?”
    可是我好像看到过"只要有其它线程在运行,程序就不会停止啊?"
    有点糊里糊涂了,请高手帮忙。谢谢了
      

  6.   

    执行时间的问题,你没有加(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
      

  7.   

    两次打印结果肯定不一样。因为当你把System.out.println("Main Thread")注释掉后,主线程运行的时候没有打印东西。因为多线程是交替执行的,你开启两个线程,当线程执行到ThreadTest时,安运行run()方法,而方法里Thread.currentThread().getName())是获取当前线程的名字,即ThreadTest线程的名字。如果你在ThreadLife里也加入这条语句,那么你就能清晰的看到它们的执行顺序。不过多线程操作本来就有很多的不确定因素,得看CPU如何线程分配时间,所以每次的运行结果也有所不同。建议你去看看关于线程的好书。