从Java到JVM到OS线程的优先级

340 篇文章 0 订阅
46 篇文章 2 订阅

前言

Java 的线程的调度机制由 JVM 实现,假如有若干条线程,你想让某些线程拥有更长的执行时间,或某些线程分配少点执行时间,这时就涉及“线程优先级”。

优先级别

Java 把线程优先级分成10个级别,线程被创建时如果没有明确声明则使用默认优先级,JVM 将根据每个线程的优先级分配执行时间的概率。有三个常量Thread.MIN_PRIORITYThread.NORM_PRIORITYThread.MAX_PRIORITY分别表示最小优先级值(1)、默认优先级值(5)、最大优先级值(10)。

由于 JVM 的实现以宿主操作系统为基础,所以 Java 优先级值与各种不同操作系统的原生线程优先级必然存在某种映射关系,这样才足以封装所有操作系统的优先级提供统一优先级语义。例如1-10优先级值在 Linux 可能要与-20-19优先级值进行映射,而 Windows 系统则有9个优先级要映射。

优先级高先执行?

我们能否用优先级值的大小来控制线程的执行顺序呢?答案明显是不能的。这是因为影响线程优先级的因素有很多,包括:
* 不同版本的操作系统和 JVM 都可能行为不相同。
* 优先级对于不同操作系统调度器的意义可能不相同。
* 有些操作系统的调度器不支持优先级。
* 对于操作系统,线程的优先级存在“全局”和“本地”之分,一般不同进程的优先级相互独立。
* 前面提到过,不同的操作系统优先级定义的值不一样,而 Java 只定义1-10。
* 操作系统常常会对长时间得不到运行的线程给予增加一定的优先级。
* 操作系

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超人汪小建(seaboat)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值