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

初学者关于多线程问题!
public class P295
{
  public static void main(String args[])
  {
  new TestThread().start();
for(int i=0;i<10;i++)
{
System.out.println("main 线程在运行");
}
  }
 }
 class TestThread extends Thread
 {
  public void run()
  {
  for(int i=0;i<10;i++)
{
System.out.println("TestThread 在运行");
}
}
  }
输出结果为什么不是:
main 线程在运行
TestThread 在运行
main 线程在运行
TestThread 在运行
main 线程在运行
TestThread 在运行
......

------解决方案--------------------
for(int i=0;i<10;i++) 改下~~不要循环10次~~ 改成while(true)
线程你虽然理解了他是单独起来的不影响主线程 但是你要知道计算机是如何分配资源的~~
简单举个例子计算机把时间分成了很多个时间片~一个时间片内运行一个独立的线程~ 所以这个2个线程是在切换着运行的
由于你这里只循环10次 一个时间片的功夫就执行完了 所以看不到你想要的效果
------解决方案--------------------
在单核计算集中,所谓的并发,在计算机内部,只有一个进程在执行。在计算机中,进程是资源拥有的单位,线程是调度得单位,所在在同一时刻只有一个线程在执行,所以你每次执行的结果可能都不一样。
------解决方案--------------------
不可能是交替 但是~~因为一个时间片内部可能值做一次循环 出来的结果应该是这样的
A
A
A
A
A
B
B
B
B
B
B
B
A
A
A
A
A
A
A
B
B
B
B
B
B
.....
------解决方案--------------------
有等待时间
------解决方案--------------------
如果那样的话 ,好像不能停止啊 必须手动结束进程?
------解决方案--------------------
package Thread;

public class P295
{
public static void main(String args[])
{
TestThread t=new TestThread();
Thread d1=new Thread(t);
Thread d2=new Thread(t);
d1.start();
d2.start();


}
}
class TestThread extends Thread
{
public void run()
{
for(int i=0;i<10;i++){
this.fun();
}
 
 }
public void fun(){

System.out.println(Thread.currentThread().getName()+" 在运行");

}
}
------解决方案--------------------
你就手动停掉线程好了~~让你看下输出结果 或许就明白了~~
------解决方案--------------------
并发编程的思想,不要去设定顺序结果