线程优先级详解

x33g5p2x  于2021-12-18 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(377)

线程的优先级是什么

在操作系统中,线程可以划分优先级,线程优先级越高,获得 CPU 时间片的概率就越大,但线程优先级的高低与线程的执行顺序并没有必然联系,优先级低的线程也有可能比优先级高的线程先执行。

如何设置线程的优先级

在 Java 中,可以通过 setPriority(int newPriority) 方法来设置线程的优先级。

线程的优先级分为 1~10 一共 10 个等级,所有线程默认优先级为 5,如果优先级小于 1 或大于 10,则会抛出 java.lang.IllegalArgumentException 异常。

Java 提供了 3 个常量值可以用来定义优先级,源码如下:

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;

线程优先级的继承特性

在 Java 中,线程的优先级具有继承性,如果线程 A 启动了线程 B,则线程 B 的优先级与线程 A 的优先级是一样的。

我们可以来举例说明,代码如下:

public class Run {
    public static void main(String[] args) {
        System.out.println("线程 main 的优先级(改变前):" + Thread.currentThread().getPriority());
// Thread.currentThread().setPriority(9);
// System.out.println("线程 main 的优先级(改变后):" + Thread.currentThread().getPriority());
        Thread thread = new Thread("A") {
            @Override
            public void run() {
                System.out.println("线程 A 的优先级:" + this.getPriority());
            }
        };
        thread.start();
    }
}

控制台输出如下:

线程 main 的优先级(改变前):5
线程 A 的优先级:5

我们把注释去掉,再次运行代码,控制台输出如下:

线程 main 的优先级(改变前):5
线程 main 的优先级(改变后):9
线程 A 的优先级:9

相关文章