解决方案 »

  1.   

    你没学到线程的精髓啊
    线程start调用以后  是相当于一个预备的状态 什么时候启动要系统管理线程的东西说了算 谁说了也不算!所以 说不准会出什么情况的 你每次运行的结果都是不确定的 输出语句 和run中的输出 说不定谁先执行
    当然run中的顺序是定的 就是这个over的输出 说不定会插到哪个位置 
      

  2.   

    想看好玩的  你就在new出一个线程来 两个都start 让循环长点 比如两个循环都50次 你看看结果
      

  3.   

    public class test_2 {
     public static void main(String[] args){
            
            ThreadDemo t = new ThreadDemo();
            Thread thread=new Thread(t);
            thread.start();
            try {
    Thread.sleep(100);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
            System.out.println("main thread is over");
            
     }
        
        public static class ThreadDemo extends Thread{
            @Override
            public void run() {
                for (int i = 0; i < 5; i++) {
                    System.out.println("This is a Thread test"+i);
                }
            }
        }
    }没什么好迷惑的,你启动了一个线程,程序自己main方法执行会启动一个自己的线程(主线程) for循环的效率何等快,基本没有被捣乱的机会,代码如上,你让主线程睡一觉,就可以看出来了。如果还不清楚,就让你启动的线程每循环一次也睡一小会。
      

  4.   

    嗯,你们说的我知道,我就是开始 ,运行几十次了都是先输出 main thread is over ,而不是run方法中的 ,以为 有问题来 (怎么说也要输出次不一样的阿).     但是我现在又 试出来了.   谢谢亲 们哈
      

  5.   

    当你thread.start()之后只是启动了一个线程,该线程并未获得cpu,只是达到就绪状态
    此时有2个线程,main和该线程,那么其实应当是两者竞争cpu
    所以此时输出顺序不能确定~但是貌似有一定的机制保证当前线程更容易抢占到cpu吧