首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

菜鸟关于多线程有关问题

2012-01-30 
初学者关于多线程问题!public class P295{public static void main(String args[]){new TestThread().star

初学者关于多线程问题!
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()+" 在运行");

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

热点排行