线程优先级:Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。默认的线程优先级是5
优先级低只是意味着获得调度的概率低.并不是优先级低就不会被调用了.这都是看CPU的调度 ,并且优先级的设定建议在start()调度前
6.1 创建一个类实现Runnable接口,并写执行逻辑出来,用以测试线程的优先级
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "--->" + Thread.currentThread().getPriority());
}
}
6.2 创建一个main类,然后使用getPriority()方法观测主线程的运行优先级(一般都是5),然后引入实现Runnable接口的类,建立几个线程,分别设定这些线程的优先级是多少,然后分别启动这些线程
//线程优先级最小优先级为1,最大优先级为10,一般默认优先级NORM_PRIORITY = 5
public class TestPriority {
//主线程是默认优先级,是改不了的
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + "--->" + Thread.currentThread().getPriority());
MyPriority myPriority = new MyPriority();
//因为要观测线程的优先级,所以就不进行简写
Thread t1 = new Thread(myPriority);
Thread t2 = new Thread(myPriority);
Thread t3 = new Thread(myPriority);
Thread t4 = new Thread(myPriority);
Thread t5 = new Thread(myPriority);
Thread t6 = new Thread(myPriority);
//先设置优先级,再启动
t1.start();
t2.setPriority(2);
t2.start();
t3.setPriority(4);
t3.start();
t4.setPriority(Thread.MAX_PRIORITY); //10
t4.start();
t5.setPriority(-1);
t5.start();
t6.setPriority(11);
t6.start();
}
}
结果分析
由此可以看到不同线程的优先级分别打印,但并不代表优先级高的线程一定比优先级低的线程要先执行;此外我们还能看到优先级不存-1和11,超出1-10的优先级设定就会抛出异常提醒