线程的调度
线程的调度
当多线程
jvm如何决定 谁先运行
在单cpu的系统中, 多个线程㤇共享cpu, 在任何时间点上实际只能有 一个线程在运行
控制多个线程在同一个cpu上以 某种顺序运行称为 线程调度
Java虚拟机 支持一种非常简单的, 确定的 调度算法, 叫做 固定优先级算法.
这个算法 基于 线程的优先级 对其进行调度
线程的优先级
每个java线程都有一个优先级, 其范围都在1到10之间, 默认情况下, 每个线程的优先级都设置为5
在线程A运行过程中创建的新的 线程对象B, 初始状态 具有和 线程A 相同的 优先级
如果A是个 后台线程, 则B 也是后台线程
可在线程创建之后的 任何时候, 通过 setPriority(int priority) 方法, 改变其原来的优先级
java中, 线程调度器
基于线程优先级的 线程调度
-
具有较高优先级的线程 比 优先级较低的线程优先执行
-
对具有相同优先级的线程, Java的处理是随机的
-
底层操作系统支持的优先级可能要少于10个,
这样会造成一些混乱.
因此, 只能将优先级作为一种很粗略的工具使用.
最后的控制,可以通过明智地使用 yield()函数来完成
-
我们只能基于效率的考虑 来使用 线程优先级, 而不能依靠 线程优先级来 保证 算法的正确性
体会
线程的优先级
假设某线程正在运行, 则只有出现以下情况之一, 才会使其暂停流行
- 一个具有更高优先级的线程 变成 就绪状态(Ready)
- 由于输入/输出(或其他一些原因), 调用 sleep, wait, yield 方法使其发生阻塞
- 对于 支持时间分片的系统, 时间片的时间期满
参考链接
https://www.xuetangx.com/learn/THU08091000252/THU08091000252/7754101/video/12732935
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)