• Java的抢占式调度


    关于线程的调度

    一、抢占式调度模型

    ​ 哪个线程的优先级比较高,抢到的cpu时间片的概率就高一点。

    ​ java采用的就是抢占式的调度方法

    1、java中是关于优先级的

    ①、setPriority(int newPriority) 更改此线程的优先级。

    ②、int getPriority返回此线程的优先级

    • java中默认优先级是5
    • 最低优先级是0,最高优先级是10
    • 优先级比较高的,获取时间片可能会多一点

    代码示例:

    1. public class ThreadTest11 {
    2. public static void main(String[] args) {
    3. System.out.println("最高优先级" + Thread.MAX_PRIORITY);
    4. System.out.println("最低优先级" + Thread.MIN_PRIORITY);
    5. System.out.println("默认优先级" + Thread.NORM_PRIORITY);
    6. //获取当前线程的优先级
    7. Thread currentThread = Thread.currentThread();
    8. System.out.println("获取当前线程的优先级" + currentThread.getPriority());
    9. Thread t=new Thread(new Thread11());
    10. t.setName("t");
    11. t.setPriority(4);
    12. System.out.println("t线程的优先级是"+t.getPriority());
    13. }
    14. }
    15. class Thread11 implements Runnable{
    16. @Override
    17. public void run() {
    18. System.out.println(Thread.currentThread().getName()+"线程的默认优先级是"+Thread.currentThread().getPriority());
    19. }
    20. }

    输出:

    1. 最高优先级10
    2. 最低优先级1
    3. 默认优先级5
    4. 获取当前线程的优先级5
    5. t线程的优先级是4

    ③、 静态方法:public static void yield()
    对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。 调度程序可以自由地忽略这个提示。yield()不是阻塞,相当于回到就绪!

    ④、void join()合并线程
    举例:

    1. calss Thread01 extends Thread{
    2. public void do(){
    3. ​ Thread2 t=new Thread02
    4. ​ t.join//在此处当前线程进入阻塞,t线程执行,t线程执行之后,执行当前线程
    5. ​ }
    6. ​ }
    7. class Thread2 extends Thread{
    8. }

    SCALA 复制 全屏

    二、均分式调度模型

    ​ 平均分配cpu时间片,每个线程占用的cpu时间片时间长度一样

    ​ 平均分配,一切平等

    ​ 有一些编程语言,线程调度模型采用的是这种方式

     

  • 相关阅读:
    网页设计中网站的设计与实现
    机器人C++库(2)Robotics Library API介绍
    Mysql和ES、Redis数据同步方案汇总
    OceaBase 分区表创建技巧
    BigDecimal使用
    HTML区块、布局
    网络编程——套接字
    Java反射学习笔记--使用示例
    asp.net core把所有接口和实现类批量注入到容器
    2.1.1+2.1.3进程的概念、组成、特征
  • 原文地址:https://blog.csdn.net/guanshengg/article/details/126464705