携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
今天,我们来了解一下线程的优先级。
线程优先级的java源码解析
这里有个判断,判断优先级是否位于1-10之间。
这里指定了三个数值,默认的优先级是5,最小是1,最大是10.
如果有线程组,那最大的优先级不能高过线程组里的优先级
然后就是设置线程的优先级,如你所见,这个方法也是本地方法:
jvm源码部分源码解析
我们从这个thread.c找到这个jvm.cpp文件下的入口方法
然后找到thread.cpp文件下的设置优先级的方法
然后我们可以看到是操作系统设置的优先级方法:
这个setpriority就是操作系统的内置函数,这里面内置优先级算法,所以不同的操作系统业务线程的优先级执行都不同,百度百科显示如下:
总结
线程优先级呢,顾名思义就是优先跑这个线程优先级大的,但是呢?我是不是跑业务的时候指定优先级高的就一定先跑呢?这个不一定,因为真正操作线程的是操作系统,java层面是不能操作算法的,所以根本上就是给操作系统一个建议,真正的调度顺序是由操作系统底层的算法实现的。