Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。
线程的优先级用数字表示,范围从1~10.
Thread.MIN_PRIORITY = 1;
Thread.MAX_PRIORITY = 10;
Thread.NORM_PRIORITY = 5;
- 线程优先级高的,不一定先执行,是由CPU调度的,只是执行权重大了
- 优先级低只是意味着获得调度的概率低.并不是优先级低就不会被调用了.这都是看CPU的调度
- 记住一句话:线程只受CPU调度
使用以下方式改变或获取优先级:
getPriority()
setPriority(int xxx)
注意:先设置优先级再启动!!!
package com.kuang.thread;
/**
* @ClassName TestPriority
* @Description 线程优先级
* @Author 麻虾
* @Date 2021/5/9 10:59 59
* @Version 1.0
*/
public class TestPriority {
public static void main(String[] args) {
//主线程默认优先级 一般都是5
System.out.println(Thread.currentThread().getName() + "----->" + Thread.currentThread().getPriority());
MyPriority myPriority = new MyPriority();
//创建6个线程对象
Thread thread1 = new Thread(myPriority);
Thread thread2 = new Thread(myPriority);
Thread thread3 = new Thread(myPriority);
Thread thread4 = new Thread(myPriority);
Thread thread5 = new Thread(myPriority);
Thread thread6 = new Thread(myPriority);
//先设置优先级再启动!!!
thread1.start();
thread2.setPriority(1);
thread2.start();
thread3.setPriority(4);
thread3.start();
// thread4.setPriority(-1); //由源码可知,报错
// thread4.start();
// thread6.setPriority(11);
// thread6.start();
thread5.setPriority(Thread.MAX_PRIORITY);//MAX_PRIORITY = 10 最高级
thread5.start();
}
}
class MyPriority implements Runnable{
@Override
public void run() {
//输出线程优先级
System.out.println(Thread.currentThread().getName() + "----->" + Thread.currentThread().getPriority());
}
}
运行结果
main----->5
Thread-0----->5
Thread-1----->1
Thread-2----->4
Thread-4----->10