线程优先级代码解析

94 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

今天,我们来了解一下线程的优先级。

线程优先级的java源码解析

这里有个判断,判断优先级是否位于1-10之间。 image.png

这里指定了三个数值,默认的优先级是5,最小是1,最大是10. image.png

如果有线程组,那最大的优先级不能高过线程组里的优先级 image.png

然后就是设置线程的优先级,如你所见,这个方法也是本地方法:

image.png

jvm源码部分源码解析

我们从这个thread.c找到这个jvm.cpp文件下的入口方法

image.png

然后找到thread.cpp文件下的设置优先级的方法

image.png

然后我们可以看到是操作系统设置的优先级方法:

image.png

这个setpriority就是操作系统的内置函数,这里面内置优先级算法,所以不同的操作系统业务线程的优先级执行都不同,百度百科显示如下:

image.png

总结

线程优先级呢,顾名思义就是优先跑这个线程优先级大的,但是呢?我是不是跑业务的时候指定优先级高的就一定先跑呢?这个不一定,因为真正操作线程的是操作系统,java层面是不能操作算法的,所以根本上就是给操作系统一个建议,真正的调度顺序是由操作系统底层的算法实现的。