黑马程序员技术交流社区
标题:
多线程问题,为什么和书上的结果不一样
[打印本页]
作者:
王新新
时间:
2013-5-29 16:28
标题:
多线程问题,为什么和书上的结果不一样
<P>public class test1 {
public static void main(String[] args){
new Thread1().start();
for(int i=0;i<10;i++){
System.out.println("main");
}
}
}
class Thread1 extends Thread{
public void run(){
for(int i=0;i<10;i++){
System.out.println("thread");
}
}
}</P>
复制代码
输出结果是:
main
main
main
main
main
main
main
main
main
main
thread
thread
thread
thread
thread
thread
thread
thread
thread
thread
为什么不是间隔出现呢,书上的输出是main和thread间隔出现啊
作者:
赵崇友
时间:
2013-5-29 16:55
这时由于每个线程获得cpu的执行权是随机的,有可能主线程获得cpu执行权后就一直执行,而Thread1线程争抢不到执行权。所以会出现这种情况。另外,双核的cpu也会导致这种情况的发生。建议把执行的次数改多些,在加个sleep,应该就会达到你想要的目的。看改的代码(类名注意,首字母要大写):
public class Test1 {
public static void main(String[] args) throws Exception{
new Thread1().start();
for(int i=0;i<100;i++){
Thread.sleep(10);
System.out.println("main");
}
}
}
class Thread1 extends Thread{
public void run(){
for(int i=0;i<100;i++){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread");
}
}
复制代码
作者:
夜默
时间:
2013-5-29 16:57
循环次数太少,将俩个类中i 值改成100。
另外运行后,由于线程之间抢占资源,输出结果是随机的。
即使 i 值 改成100.出现你这种结果也是有可能的。
多试几次就出来了
作者:
秦久启
时间:
2013-5-29 17:12
上面两位已经讲解的很是详细了。
由于现在有两个线程,main线程和Thread1线程。又由于线程运行的不确定性。所以书上和你运行的结果都是有可能的。
作者:
归☆夜↑『
时间:
2013-5-29 17:17
计算机速度快嘛 一到十主线程眨眼就运行完了,可能那时候副线程还处在就绪状态没有开始执行呢,所以就被主线程一骑绝尘咯!~~嘿嘿 ~~~个人理解 !
作者:
Super_Class
时间:
2013-5-29 18:04
使用while(true) 把代码块括起来,就有结果了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2