Topic: 执行结果的不确定能否理解为线程调度的不确定性

  Print this page

1.执行结果的不确定能否理解为线程调度的不确定性 Copy to clipboard
Posted by: zhjdenis
Posted on: 2007-09-26 21:36

两进程并行;

public class Mythread extends Thread {
private static int count=0;
public Mythread(String name)
{
  super(name);
}

  public static void main(String[] args) {
    Mythread p1=new Mythread("t1");
p1.start();
Mythread p2=new Mythread("t2");
p2.start();
for(int i=0;i<5;i++)
  {
  count++;
  System.out.println(count+":main");
  }
  }
public void run()
{
  for(int i=0;i<5;i++)
  {
    count++;
    System.out.println(count+":"+this.getName());
  }
}
}
这个程序的结果不确定
但是下面这个却是确定的,为什么啊?

public class Mythread implements Runnable {
private static int count=0;
int number;
public Mythread(int n)
{
  number=n;
  System.out.printlnThumbs down;
}
  public void run() {
    // TODO 自动生成方法存根
while(count<15)
    {
   System.out.println(count+":"+number);
count++;
    }
  }
  public static void main(String[] args) {
     //for(int i=0;i<3;i++)
//{
//   new Thread(new Mythread(i+1)).run();
//}
    new Thread(new Mythread(1)).run();
    new Thread(new Mythread(2)).run();
    new Thread(new Mythread(3)).run();
  }

}

2.Re:执行结果的不确定能否理解为线程调度的不确定性 [Re: zhjdenis] Copy to clipboard
Posted by: Cappuccino
Posted on: 2007-09-26 22:44

Thread.run() != Thread.start()

3.Re:执行结果的不确定能否理解为线程调度的不确定性 [Re: zhjdenis] Copy to clipboard
Posted by: andy_wang_5
Posted on: 2007-09-27 10:34

第一个输出结果不确定是正确的。因为是在多线程环境下执行的。
第二个你没有调用start(),(没有启动多线程)。 所以输出结果是确定的。

run()方法是不能启动多线程的。

4.Re:执行结果的不确定能否理解为线程调度的不确定性 [Re: zhjdenis] Copy to clipboard
Posted by: zhjdenis
Posted on: 2007-09-27 20:24

明白了,多谢了!

5.Re:执行结果的不确定能否理解为线程调度的不确定性 [Re: zhjdenis] Copy to clipboard
Posted by: JiafanZhou
Posted on: 2007-09-27 21:30

该用JDK1.5启用线程的方法好一点。


ExecutorService esMain = Executors.newCachedThreadPool();
esMain.execute(new Mythread(1));
esMain.shutdown();


他从更高层封装了线程启动的方法。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923