每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。(优先并不代表执行顺序,后面会【解释】)
在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同
Java线程的优先级是一个整数 (数字越大优先级越高) 其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )
从图中可以看出新建线程的默认优先级是 NORM_PRIORITY = 5
源码 ↓
public static void main(String[] args) throws InterruptedException {
Runnable runnable = new Runnable() {
@Override
public void run() {
out.println("\t" + Thread.currentThread().getName());
}
};
Thread t1 = new Thread(runnable, "A");
Thread t2 = new Thread(runnable, "B");
Thread t3 = new Thread(runnable, "C");
t1.setPriority(8);
t2.setPriority(4);
t3.setPriority(1);
t1.start();
t2.start();
t3.start();
}
输出 ↓ 可以看出上面的代码并没有什么卵用,并没有按照理想的顺序运行
线程的优先级仍然无法保障线程的执行次序。
只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。
如果CPU有空闲,即使是低优先级的线程,也可以得到足够的执行时间,接近满负荷执行。
如果CPU比较繁忙,优先级的作用就体现出来了,优先级高的线程能得到比较多的执行时间,优先级比较低的线程也能得到一些执行时间,但会少一些;CPU越繁忙,差异通常越明显。