线程的优先级
在操作系统中,线程可以划分为优先级,优先级较高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务。
设置线程的优先级使用setPriority()方法。
线程优先级的继承特性
线程的优先级具有继承性,比如A线程启动B线程,则B线程的优先级与A是一样的。
线程优先级的规则性
高优先级总是大部分先执行完,但不代表高优先级的线程全部先执行完。
且线程的优先级与代码执行顺序无关。
线程优先级具有随机性
优先级较高的线程并不一定每一次都执行完run()方法中的任务。
看谁运行的快
自定义线程类
package com.thread13;
public class MyThread1 extends Thread {
private int count = 0;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public void run() {
while (true) {
count++;
}
}
}
package com.thread13;
public class MyThread2 extends Thread {
private int count = 0;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public void run() {
while (true) {
count++;
}
}
}
启动类
package com.thread13;
public class Run {
public static void main(String[] args) throws InterruptedException {
MyThread1 myThread1 = new MyThread1();
//设置优先级为 5-3
myThread1.setPriority(Thread.NORM_PRIORITY - 3);
myThread1.start();
MyThread2 myThread2 = new MyThread2();
//设置优先级为 5+3
myThread2.setPriority(Thread.NORM_PRIORITY + 3);
myThread2.start();
Thread.sleep(20000);
myThread1.stop();
myThread2.stop();
System.out.println("a = " + myThread1.getCount());
System.out.println("b = " + myThread2.getCount());
}
}
执行结果
a = 948465056
b = 1029878491
结论
优先级高的线程执行快。