求教java 线程优先级和执行顺序问题!!

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
level a = new level();
Thread thr1 = new Thread(a);
Thread thr2 = new Thread(a);
Thread thr3 = new Thread(a);
Thread thr4 = new Thread(a);
Thread thr5 = new Thread(a);
thr1.setPriority(2);
thr5.setPriority(9);
thr3.setPriority(6);
thr1.start();
thr2.start();
thr3.start();
thr4.start();
thr5.start();
}

}
class level implements Runnable{

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("线程名:"+Thread.currentThread().getName()+"\t优先级"+Thread.currentThread().getPriority());
}

}

此程序输出为何是:
线程名:Thread-0 优先级2
线程名:Thread-1 优先级5
线程名:Thread-4 优先级9
线程名:Thread-2 优先级6
线程名:Thread-3 优先级5
这样啊??线程执行不是根据优先级的大小的顺序执行吗?
这个例子具体是怎么运行的啊?菜鸟请求高手赐教

优先级高的线程是获得较多的执行机会,优先级低的线程是获得较少的执行机会。你先启动的优先级低的几个线程,最后才启动的优先级高的。优先级低的线程是可以先执行的,只不过时间短罢了。如果你这样写,是测试不出优先级高低的,应该在run() 中执行循环输出(比如1-100)才能看出执行时间长短,否则一下就执行完了。

虽然java 提供了10个优先级,但这些优先级需要操作系统的支持。不同操作系统上优先级并不相同,也不能很好地和java的10个优先级对应。例如:window2000就只提供了7个优先级。所以应该使用MAX_PRIORITY,MIN_PRIORITY,NORM_PRIORITY来设置优先级 。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-23
优先级高的不一定先执行啊,只不过是执行时间长
相似回答