public class ThreadPriority {

/**
 * Method main
 *
 *
 * @param args
 *
 */
public static void main(String[] args) {
// TODO: Add your code here
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}class ThreadTest extends Thread
{
static int prio=3;
public ThreadTest()
{
prio++;
System.out.println(prio);
setPriority(prio);
}
public void run()
{
System.out.println(Thread.currentThread().getName()+" priority = "+getPriority() );
}
}程序本应该输出得是6。5。4,可是我在另一台机器上居然输出5。6。4,为什么,请指教!!

解决方案 »

  1.   

    java的线程机制和操作系统是有关系的。
    当jvm取决于主机平台的线程机制时,线程的调度完全受线程机制的支配。
    jvm将线程优先级映射为主机平台的优先级等级(可能多一些或者少一些)。
    如果主机的优先级等级少一些的话,那么必然有一些jvm的优先级映射为相同的平台优先级等级。
      

  2.   

    线程start以后都去抢占cpu,但是谁先抢到并不是可以预计的,这个在线程优先级差距不大的时候,跟线程的优先级的关系不大。
      

  3.   

    kaleon(为人要厚道)说得很好,还有一点要补充:
    方法start();
    只是告诉系统说:“现在线程对象g已经就绪了,你随时可以调度它。”,而并不是告诉系统:“你他妈马上把我停下来,把别的线程都停下来,调度g运行,听见没有!”^_^。