大家好,我们来分享Java多线程的优先级
Java提供了一个线程调度器来监控程序当中的启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行
线程的优先级用数字表示,范围从1~10
Thread.MIN_PRIORITY=1
Thread.MAX_PRIORITY=10
Thread.NORM_PRIORITY=5
使用以下方式改变或获取优先级
getPriority().setPriority(int xxx)
写源码:
package Demo05;
public class TestPriority {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
MyPriority myPriority =new MyPriority();
Thread K1 =new Thread(myPriority);
Thread K2 =new Thread(myPriority);
Thread K3 =new Thread(myPriority);
Thread K4 =new Thread(myPriority);
Thread K5 =new Thread(myPriority);
Thread K6 =new Thread(myPriority);
K1.start();
K2.setPriority(1);
K2.start();
K3.setPriority(4);
K3.start();
K4.setPriority(Thread.MAX_PRIORITY);//MAX_PRIORITY=10
K4.start();
K5.setPriority(-1);
K5.start();
K6.setPriority(11);
K6.start();
}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
}
}
运行结果:
结果报错
修改源码:
注释掉部分代码
(注释等效于删除)
package Demo05;
public class TestPriority {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
MyPriority myPriority =new MyPriority();
Thread K1 =new Thread(myPriority);
Thread K2 =new Thread(myPriority);
Thread K3 =new Thread(myPriority);
Thread K4 =new Thread(myPriority);
Thread K5 =new Thread(myPriority);
Thread K6 =new Thread(myPriority);
K1.start();
K2.setPriority(1); //设置优先级
K2.start(); //启动线程
K3.setPriority(4);
K3.start();
K4.setPriority(Thread.MAX_PRIORITY);//MAX_PRIORITY=10
K4.start();
// K5.setPriority(-1);
// K5.start();
//
// K6.setPriority(11);
// K6.start();
}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"-->"+Thread.currentThread().getPriority());
}
}
显示结果:
优先级低的话,只是意味着调度的概率低,并不是低就不会被调度,
这一点要看CPU
优先级高的线程不一定是先执行的
另外就是,优先级的设定最好放在start 调度之前
好了,有关于Java多线程的优先级就到这里了,谢谢大家