线程的调度

线程的调度

当多线程

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

posted on 2021-11-06 13:22  beyondx  阅读(109)  评论(0编辑  收藏  举报

导航