读书人

线程为啥没有交替执行

发布时间: 2011-12-23 23:32:01 作者: rapoo

线程为何没有交替执行
定义了两个线程:
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);

}

}

改成这样就行了

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


如果你需要这两个线程完全交替运行,你需要使用线程同步技术。
[解决办法]
使用sleep(long)可以使当前线程处于阻塞状态,暂时让出CPU

读书人网 >J2SE开发

热点推荐