网上关于jvm线程优先级的大部分文章会传达两个观点:
1、优先级更高的线程倾向于拥有某种优先(优先开始、优先结束?)
2、这种倾向性具有某种说不清的概率(并不是优先级高的线程总是优先)
为了弄清具体实现的算法,查阅了相关文档,罗列如下:
1、jvm线程优先与底层OS实现有关
https://stackoverflow.com/questions/20333150/java-multithreading-thread-priority?r=SearchResults
2、不同操作系统上的表现具体如下:
priority 1-10 会mapping到 OS线程优先级实现:
!注意:linux 如果要启用线程优先级,需要指定参数 -XX:UseThreadPriorities,并且root用户启动进程。否则默认使用SCHED_OTHER级别,无优先级。
https://www.javamex.com/tutorials/threads/priority_what.shtml
3、openjdk8 源码
留下一个疑问:网上大量对线程优先级的样例代码,为什么有些能保证高优先级先运行,有些又不能保证呢?