public class TestThread1 {
public static void main(String args[]) {
Runner1 r = new Runner1();
Thread t =new Thread(r);
t.start();

for(int i=0; i<100; i++) {
System.out.println("Main Thread:------" + i);
}
}
}

class Runner1 implements Runnable {
public void run() {
for(int i=0; i<100; i++){
System.out.println("Runner1:" + i);
}
}
}
去掉主程序输出中的  + i 线程不再交替执行
不知道为什么,求解释

解决方案 »

  1.   

    只是因为速度太快了而已。把for循环设置长点就是了,比如 10000000。
      

  2.   

    程序是会交替运行的,多执行几次偶尔还是会交替的。但是CPU太快了。CPU的运行速度是10亿次美秒!!!
      

  3.   

    我把for改成10000,有“+i”试试5次,交替很明显,去掉之后,除了中间略微闪了几下(不知是不是线程执行),剩下的就是主线程执行完,另一个才执行。
    这两个对比说明这根电脑的运行速度应该没有关系吧。
    还有一点要声明:我是在DOS下执行的
      

  4.   

    hi,在dos下执行时什么意思,记得windows98才带有DOS系统的,你是指的在命令提示符下执行的吗,这和用ide执行有什么差别吗
      

  5.   


    10000次真不算啥。有没有 +i,涉及到 String 做连接运算,所以消耗会更明显很多,也就是相当于延长了每次循环的CPU开销;那么对应的JVM执行优化策略也会不一样;基本上就这两点主要区别,你可以用javap来看看字节码就清楚了。所谓DOS,指的是命令行下吧,也就是CMD,这个没有太大差异。
    另外呢,其实这种测试方式,瓶颈其实是卡在IO上了,建议修改下:
    for(int i=0; i<10000000; i++) {
      if (i % 10000 == 0)
        System.out.println("Main Thread:------" + i);
    }
    线程也这么修改下,免得刷屏刷得太快你都看不见东西。
      

  6.   

    我试了一下javap看了半天没啥不一样,又试了javap -c还是没看出有啥不一样我把程序的主线程和另一线程都加上if
    for(int i=0; i<10000000; i++) {
      if (i % 10000 == 0)
      System.out.println();
    }
    结果中确实在交替这应该跟判断有关,也证明可能是字符串连接占用的开销比较大,导致的结果我把循环改成100000000次,仔细看结果中间确实有分支线程的输出