《面向对象程序设计-JAVA》第267页例题
程序大致如下:
class th
{
public static void main(String args[])
{
Thread First=new MyThread("A");
First.setPriority(1);
Thread Second=new MyThread("B");
Second.setPriority(6);
Thread Third=new MyThread("C");
Third.setPriority(10);
First.start();
Second.start();
Third.start();
}
}
class MyThread extends Thread
{
String str;
MyThread(String str)
{ this.str=str; }
public void run()
{
for(int i=0;i<2;i++)
System.out.print(str+" "+getPriority()+" ");
}
}
按书上看结果应该是
C 10 C 10 B 6 B 6 A 1 A 1但是机房机子上和我自己机子上跑出结果如下:
F:\myjava>java th
C 10 C 10 B 6 B 6 A 1 A 1
F:\myjava>java th
B 6 B 6 C 10 C 10 A 1 A 1
F:\myjava>java th
B 6 B 6 C 10 C 10 A 1 A 1
F:\myjava>java th
B 6 B 6 C 10 C 10 A 1 A 1从第二次开始,就出现错误!有没有高人来说明一下怎么会这样?谢谢!

解决方案 »

  1.   

    这个与操作系统与你的JVM调度线程有关,这个就是线程的并发是不受你控制的,
    如果是在多CPU下,估计出现的可能更有趣,甚至可以出现这样。
     B 6  C 10 C 10 A 1B 6 A 1
      

  2.   

    很正常啊! CUP 调度问题啊.
    由于First优先级底于5(正常情况下),所以它不一定马上运行,因为系统可能还有其他程序片运行着.Second为6,所以一旦start很快就可以获得运行.再加上 for 中是连续的,所以打印出
    B 6 B 6
    然后Third运行:
    C 10 C 10 
    然后:
    A 1 A 1我觉得打印出:B 6 B 6 C 10 C 10 A 1 A 1 算是正常的了!