现有一多线程程序:
class PriorityTest
{
   public static void main(String args[])
   {  Thread First=new MyThread("A");  
      First.setPriority(Thread.MIN_PRIORITY);
      Thread Second=new MyThread("B");  
      Second.setPriority(Thread.NORM_PRIORITY+1);
Thread Third=new MyThread("C");   
Third.setPriority(Thread.MAX_PRIORITY);
      First.start();
      Third.start();
      Second.start();
   }}
class MyThread extends Thread 
{String message;
   MyThread(String message)
  { this.message= message;}
   public void run( ) 
   { 
       for (int i=0;i<2;i++)
       System.out.println(message+"  "+getPriority());}}
运行结果很是令人费解
在家里的机器上运行总是这样的
C 10
C 10
B 6
B 6
A 1
A 1
可是到了单位运行就是这样的:
C 10
B 6
A 1
C 10
B 6
A 1
更奇怪的是,在运行几次就会出现这样的结果:
A 1
C 10
B 6
A 1
C 10
B 6
不知道是怎么回事,已经设置的优先级怎么会出现这么多样的结果

解决方案 »

  1.   

    Java中的线程调度应该是基于时间片轮循加抢占式的。当高优先级任务的时间片用完后,那么调度器会去检查低优先级的线程进行调度。
      

  2.   

    java程序在JVM中运行的时候,多线程运行的时候,是轮流抢占CPU资源,任何时刻只有一个线程在CPU中运行,
    多个线程不同优先级的时候,并不一定就是优先级高的先运行,只是优先级高的比优先级低的抢到CPU资源的概率要多一些。