日期:2014-05-20  浏览次数:20796 次

线程为何没有交替执行
定义了两个线程:
class   Number1   extends   Thread{
       
        public   void   run()
        {
              for(int   i=0;i <10;i++)
              {
                  System.out.println( "num1 ");
              }
        }
}

class   Number2   extends   Thread{
       
        public   void   run()
        {
              for(int   i=0;i <10;i++)
              {
                  System.out.println( "num2 ");
              }
        }
}
分别启动后:
        t1.start();
        t2.start();
结果总是:
num1
num1
num1
num1
num1
num1
num1
num1
num1
num1
num2
num2
num2
num2
num2
num2
num2
num2
num2
num2
理论上,应该部分交替执行啊?

------解决方案--------------------
FOR到100
------解决方案--------------------
交替执行倒不会,理由有几点:
1. for循环太简单了,cpu很容易便处理完输出。
2. 你没有任何线程调度的工作,比如每个线程sleep一下。

不过多运行几次,结果到可能不同,但绝对不会出现一行num1与num2交替的情况。
------解决方案--------------------
你的计算机太快了,用个速度慢点的计算机吧.哈哈,开个玩笑!
楼上说的很对,给没个进程家个sleep语句吧.问题就解决了.
------解决方案--------------------
计算机的性能是很高地,这么点循环,你第2个还没起来,第一个已经执行完了
------解决方案--------------------
楼上全对~ 顶起
------解决方案--------------------
Lisliefor() : 你没有任何线程调度的工作,比如每个线程sleep一下

这个正解~!
------解决方案--------------------
要sleep,让CPU把时间片切换出去,sleep(0)就可以
------解决方案--------------------
把for循环全换成while(true)
------解决方案--------------------
class Number1 extends Thread
{

public void run()
{
for (int i = 0; i < 10; i++)
{
System.out.println( "num1 ");
try
{
sleep(5);
}
catch (Exception e)
{

}
}
}
}

class Number2 extends Thread
{

public void run()
{
for (int i = 0; i < 10; i++)
{
System.out.println( "num2 ");
try
{
sleep(5);
}
catch (Exception e)
{

}
}
}
}

public class MyThread
{

/**
* @param args
*/
public static void main(String[] args) throws Exception
{
Thread t1 = new Number1();
Thread t2 = new Number2();
t1.start();
t2.start();
while (true)
Thread.sleep(2000);

}

}

改成这样就行了

------解决方案--------------------