1.线程优先级范围在1-10之间。
System.out.println(Thread.MAX_PRIORITY); 打印结果:10 System.out.println(Thread.MIN_PRIORITY); 打印结果:1 System.out.println(Thread.NORM_PRIORITY);打印结果:5
2.当创建一个线程时,如果没有设置该线程的优先级,那么该线程的优先级就是父线程的优先级。如果一个线程没有父线程并且没有设置该线程的优先级,那么该线程默认的优先级为NORM_PRIORITY=5.
所以主线程的优先级是5.
3.线程优先级的注意事项。
看一段代码:
class MyThread extends Thread{
public void run(){
System.out.println("优先级为"+this.getPriority()+"的线程运行");
}
}
class Test {
public static void main(String[] args) {
for(int i=0;i<5;i++){
MyThread thread = new MyThread();
thread.setPriority(1);
thread.start();
}
for(int i=0;i<5;i++){
MyThread thread = new MyThread();
thread.setPriority(5);
thread.start();
}
for(int i=0;i<5;i++){
MyThread thread = new MyThread();
thread.setPriority(10);
thread.start();
}
}
}打印结果:
优先级为5的线程运行
优先级为5的线程运行
优先级为5的线程运行
优先级为10的线程运行
优先级为10的线程运行
优先级为10的线程运行
优先级为10的线程运行
优先级为5的线程运行
优先级为10的线程运行
优先级为5的线程运行
优先级为1的线程运行
优先级为1的线程运行
优先级为1的线程运行
优先级为1的线程运行
优先级为1的线程运行
从这个例子可以看出:优先级高的线程先运行(不能保证,只是概率大一些)。所以逻辑上不能靠优先级来控制。 |