5 线程优先级

每个线程执行时都有一个优先级的属性,优先级高的线程可以获得较多的执行机会,而优先级低的线程则获得较少的执行机会。与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的也并非没机会执行

每个线程默认的优先级都与创建它的父线程具有相同的优先级,在默认情况下,main线程具有普通优先级

Thread类提供了setPriority(int newPriority)和getPriority()方法来设置和返回一个指定线程的优先级,其中setPriority方法的参数是一个整数,范围是1~10之间,也可以使用Thread类提供的三个静态常量:

  1. MAX_PRIORITY =10
  2. MIN_PRIORITY =1
  3. NORM_PRIORITY =5

例子代码,如下

  1. public class Test1 {
  2. public static void main(String[] args) throws InterruptedException {
  3. new MyThread("高级", 10).start();
  4. new MyThread("低级", 1).start();
  5. }
  6. }
  7. class MyThread extends Thread {
  8. public MyThread(String name,int pro) {
  9. super(name);//设置线程的名称
  10. setPriority(pro);//设置线程的优先级
  11. }
  12. @Override
  13. public void run() {
  14. for (int i = 0; i < 100; i++) {
  15. System.out.println(this.getName() + "线程第" + i + "次执行!");
  16. }
  17. }
  18. }
  19. 复制代码

从执行结果可以看到 ,一般情况下,高级线程更显执行完毕
注意一点

虽然Java提供了10个优先级别,但这些优先级别需要操作系统的支持。不同的操作系统的优先级并不相同,而且也不能很好的和Java的10个优先级别对应。所以我们应该使用MAX_PRIORITY、MIN_PRIORITY和NORM_PRIORITY三个静态常量来设定优先级,这样才能保证程序最好的可移植性