java多线程优先级使用setPriority方法
三个特性:继承性,规则性和随机性
源码: public final void setPriority(int newPriority) {
ThreadGroup g;
checkAccess();
if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
throw new IllegalArgumentException();
}
if((g = getThreadGroup()) != null) {
if (newPriority > g.getMaxPriority()) {
newPriority = g.getMaxPriority();
}
setPriority0(priority = newPriority);
}
}
源码解释:线程优先级分为1-10,如果大于10或者小于1,则JDK抛出异常 throw new IllegalArgumentException(),不写优先级默认为5
1,首先继承性
概念:A线程继承B线程,A,B的优先级是一样的
示例代码
package ThreadPackage;
public class youxianjiThread {
public static void main(String[] args) {
System.out.println("main start "+Thread.currentThread().getPriority());
//hread.currentThread().setPriority(6);
System.out.println("main end "+Thread.currentThread().getPriority());
myThread1 thread=new myThread1();
thread.start();
}
}
class myThread1 extends Thread{
@Override
public void run() {
System.out.println("myThread1 "+this.getPriority());
myThread2 thread=new myThread2();
thread.start();
}
}
class myThread2 extends Thread{
@Override
public void run() {
System.out.println("myThread2 "+this.getPriority());
}
}
执行结果:
main start 5
main end 5
myThread1 5
myThread2 5
main end 5
myThread1 5
myThread2 5
去掉注释执行结果:
main start 5
main end 6
myThread1 6
myThread2 6
main end 6
myThread1 6
myThread2 6
2,规则性
概念:
高优先级的总是先执行完,但是不是全部先执行完,当优先级差距较大时,谁先执行完,与代码调用顺序没有关系,CPU尽量将执行资源让给优先级比较高的线程,
实例查看优先级
3,随机性
概念:
但是当线程优先级差距不大时,则不一定总是高的先执行完
代码: