一些无关的话
昨天学到了关于线程的优先级,我也思考出一些东西,优先级高的线程不一定每次都会抢过优先级低的线程,就像人生只有你肯努力,总会有成功的那一天。当然只要你够努力,你成功的概率也会更高。
除非你不想赢,否则没人能让你输
正文
高优先级的线程抢占低优先级的线程的cpu执行权,但是仅从概率上来说,高优先级的线程更有可能被执行,并不意味着只有高优先级的线程执行完毕以后,低优先级的线程才能执行。
也就是说优先级高的线程不是一定会拿到cpu的使用权。
关于验证,请看下面代码部分。
Java中的线程优先级是Thread类中定义的常量:
- NORM_PRIORITY:值为 5
- MAX_PRIORITY:值为 10
- MIN_PRIORITY:值为 1
默认的优先级为:NORM_PRIORITY
优先级的设置方法为:
final void setPriority(int newPriority)
代码说明:
public class priority {
public static void main(String[] args) {
//设置线程a
Thread a = new Thread(()-> {
for (int i = 0 ;i <100;i++){
System.out.println("a"+i);
}
});
//设置线程b
Thread b = new Thread(()-> {
for (int i = 0 ;i <100;i++){
System.out.println("b"+i);
}
});
//设置优先级
a.setPriority(3);
b.setPriority(4);
//启动线程
a.start();
b.start();
}
}
输出的是1-99的值。
部分结果:
可以看到这里是a线程和b线程交叉执行的。可以得到并不是优先级高的线程一定会获得cpu的执行权。