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

刚学线程,遇到了简单的问题,急急
package thread1;
//为什么这个程序没有线程的效果?它是先执行完a,再执行b。而不是a,b穿叉执行?
public class test_thread {
public static void main(String[] args) {
Thread a=new Thread(new A());
Thread b=new Thread(new B());
a.start();
b.start();
}

}
class A implements Runnable{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println("A: "+i);
}
}
}
class B implements Runnable {
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println("B: "+i);
}
}
}

------解决方案--------------------
速度太快,看不出效果,建议将 100修改为10000,或者在for循环内部加一个Thread.sleep(100)这样的东西。

你这个没出来效果是因为100太小,程序执行速度太快,造成的。
------解决方案--------------------
我的是穿插执行的,你可以这样试试:
class A1 implements Runnable{

@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i < 100; i++){
System.out.println("A:" + i);
try{
Thread.sleep(1000);
}
catch(InterruptedException e){

}
}
}

}
------解决方案--------------------
因为你的两个线程全是写在main方法中的,它先启动的a线程,再启动的b线程,而你的for中的次数又在小,很快a就执行完了,而b可能才启动呢,而且启动不一定就会马上被执行的,这样是就很难看到交叉效果的。楼上说的对,要加大次数1000.
------解决方案--------------------
顶楼上。楼上说的对!
------解决方案--------------------
还有可能你电脑是双核或者四核的原因,也会导致可能很难出现
------解决方案--------------------
属于多实例多线程,两个线程实例(其实还有main方法主线程)由cpu调度执行,有不确定性,交叉出现是一种可能的结果。用sleep方法让线程休眠几秒会看到结果。建议线程测试多次,这样不同结果的概率会大些,更好的理解线程。
------解决方案--------------------
探讨
因为你的两个线程全是写在main方法中的,它先启动的a线程,再启动的b线程,而你的for中的次数又在小,很快a就执行完了,而b可能才启动呢,而且启动不一定就会马上被执行的,这样是就很难看到交叉效果的。楼上说的对,要加大次数1000.

------解决方案--------------------
你的电脑是双核或者是四核导致的 代码没有什么问题 加上Thread.sleep()方法效果明显些