返回顶部
首页 > 资讯 > 精选 >Java线程的调度与优先级方法
  • 703
分享到

Java线程的调度与优先级方法

2023-06-29 08:06:33 703人浏览 薄情痞子
摘要

今天小编给大家分享一下Java线程的调度与优先级方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。由于CPU的计算频率非常高

今天小编给大家分享一下Java线程的调度与优先级方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    由于CPU的计算频率非常高,每秒计算数十亿次,因此可以将CPU的时间从毫秒的维度进行分段,每一小段叫作一个CPU时间片。

    目前操作系统中主流的线程调度方式是:基于CPU时间片方式进行线程调度。线程只有得到CPU时间片才能执行指令,处于执行状态,没有得到时间片的线程处于就绪状态,等待系统分配下一个CPU时间片。由于时间片非常短,在各个线程之间快速地切换,因此表现出来的特征是很多个线程在“同时执行”或者“并发执行”。

    线程的调度模型目前主要分为两种:分时调度模型和抢占式调度模型。

    (1) 分时调度模型:系统平均分配CPU的时间片,所有线程轮流占用CPU,即在时间片调度的分配上所有线程“人人平等”

    (2) 抢占式调度模型:系统按照线程优先级分配CPU时间片。优先级高的线程优先分配CPU时间片,如果所有就绪线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一些。

    由于目前大部分操作系统都是使用抢占式调度模型进行线程调度,Java的线程管理和调度是委托给操作系统完成的,与之相对应,Java的线程调度也是使用抢占式调度模型,因此Java的线程都有优先级。

    在Thread类中有一个实例属性和两个实例方法,专门用于进行线程优先级相关的操作。与线程优先级相关的成员属性为:

    // 保存Thread线程实例的优先级,1~10之间private int priority;// 获取线程优先级public final int getPriority(){//...}// 设置线程优先级public final void setPriority(int priority){//...}

    Thread实例的priority属性默认是级别5,对应的类常量是NORM_PRIORITY。优先级最大值为10,最小值为1,Thread类中定义的三个优先级常量如下:

     public final static int MIN_PRIORITY = 1; public final static int NORM_PRIORITY = 5; public final static int MAX_PRIORITY = 10;

    Java中使用抢占式调度模型进行线程调度。priority实例属性的优先级越高,线程获得CPU时间片的机会就越多,但也不是绝对的。

    示例:

    1、定义一个线程执行体,异步执行:

    public class ThreadDemo extends Thread {    private  long num = 0;    public long getNum() {        return num;    }    @Override    public void run() {        // 线程执行体:死循环       for(int i=0;;i++){           num++;       }    }}

    2、创建10个线程,并设置不同的线程优先级,来执行线程执行体:

    public class Main {    public static void main(String[] args) throws InterruptedException {        ThreadDemo[] threads = new ThreadDemo[10];        for(int i=0;i<threads.length;i++){            threads[i] = new ThreadDemo();            // 设置线程优先级1~10            threads[i].setPriority(i+1);        }        // 启动线程        for(int i=0;i<threads.length;i++){            threads[i].start();        }        // 等待线程1s        Thread.sleep(1000);        // 停止线程        for(int i=0;i<threads.length;i++){            threads[i].stop();        }        for(int i=0;i<threads.length;i++){            System.out.println(threads[i].getName()                    +"-优先级为-"+threads[i].getPriority()                    +"-机会值为-"+threads[i].getNum());        }    }}

    在线程的run()方法中,设置了一个没有条件判断表达式的for循环,这是一个死循环,线程启动之后,永远也不会退出,直到线程被停止。那么,问题来了:如何停止这10个线程呢?这里使用Thread类的stop()实例方法,该方法的作用是终止线程的执行。

    Thread类的stop()实例方法是一个过时的方法,也是一个不安全的方法。这里的安全指的是系统资源(文件、网络连接等)的安全&mdash;&mdash;stop()实例方法可能导致资源状态不一致,或者说资源出现问题时很难定位。在实际开发过程中,不建议使用stop()实例方法。

    3、运行结果:

    Thread-0-优先级为-1-机会值为-0
    Thread-1-优先级为-2-机会值为-0
    Thread-2-优先级为-3-机会值为-0
    Thread-3-优先级为-4-机会值为-0
    Thread-4-优先级为-5-机会值为-3038296
    Thread-5-优先级为-6-机会值为-4473657
    Thread-6-优先级为-7-机会值为-2521154868
    Thread-7-优先级为-8-机会值为-2537430692
    Thread-8-优先级为-9-机会值为-2708120258
    Thread-9-优先级为-10-机会值为-2690953898

    演示示例中10个线程停下来之后,某个线程的实例属性opportunities的值越大,就表明该线程获得的CPU时间片越多。分析案例的执行结果,可以得出以下结论:

    (1) 整体而言,高优先级的线程获得的执行机会更多。从实例中可以看到:优先级在5级以上的线程执行机会明显偏多,整体对比非常明显。

    (2) 执行机会的获取具有随机性,优先级高的不一定获得的机会多。比如,例子中的thread-9比thread-8优先级高,但是thread-9所获得的机会反而偏少。

    注意:

    (1) 线程优先级会提示调度器优先调度该线程,它仅仅是一个提示,调度器可以忽略它。

    (2) 如果CPU比较忙,那么优先级高的线程会获得更多的时间片,但是CPU闲时,优先级几乎没作用。

    以上就是“Java线程的调度与优先级方法”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Java线程的调度与优先级方法

    本文链接: https://lsjlt.com/news/323787.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java线程的调度与优先级方法
      今天小编给大家分享一下Java线程的调度与优先级方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。由于CPU的计算频率非常高...
      99+
      2023-06-29
    • Java线程的调度与优先级详解
      目录示例:1、定义一个线程执行体,异步执行:2、创建10个线程,并设置不同的线程优先级,来执行线程执行体:3、运行结果:总结由于CPU的计算频率非常高,每秒计算数十亿次,因此可以将C...
      99+
      2024-04-02
    • Java线程优先级
      Java 线程优先级Thread 类中,使用如下属性来代表优先级。private int priority;我们可以通过 setPriority(int newPriority) 来设置新的优先级,通过 getPriority() 来获取线...
      99+
      2015-02-01
      java教程 Java
    • Win11如何调高进程的优先级?Win11调高进程的优先级方法
        相信很多使用过电脑的小伙伴都知道,系统资源是有限的,因此我们在打开很多的应用程序就需要设置一个优先级,那么使用Win11系统的电脑要如何去进行这个设置呢?其实操作起来还是很简单的,下面就和小编一起来看看方法吧。   ...
      99+
      2023-05-19
      Win11调高进程 进程优先级
    • Java多线程与优先级详细解读
      目录1、多线程1.1多线程的基本概念1.2多线程的实现1.3继承Thread类实现多线程1.4Runnable接口实现多线程1.5Thread类和Runnable接口实现多线程的区别...
      99+
      2024-04-02
    • java线程优先级指的是什么
      这篇文章给大家分享的是有关java线程优先级指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网...
      99+
      2023-06-14
    • Android线程的优先级设置方法技巧
      对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合...
      99+
      2022-06-06
      方法 技巧 android线程 优先级 Android
    • Java 线程的优先级(setPriority)案例详解
      线程可以划分优先级,优先级高的线程得到的CPU资源比较多,也就是CPU优先执行优先级高的线程对象中的任务。 设置线程优先级有助于帮助线程规划器确定下一次选中哪一个线程优先执行。 ja...
      99+
      2024-04-02
    • 深入浅析Java中线程的优先级
      本篇文章为大家展示了深入浅析Java中线程的优先级,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java 线程优先级详解及实例操作系统基本采用时分的调度运行线程,操作系统会分出一个个时间片,线程会被...
      99+
      2023-05-31
      java 线程 优先级
    • Java线程优先级变量及功能
      目录前言:Java线程优先级示例Java线程优先级的优势结论前言: 线程被称为“最小的处理单元”,是一个轻量级的子进程,分配了一些需要执行的工作。线程共享分配...
      99+
      2024-04-02
    • Java多线程怎么设置优先级
      本篇内容介绍了“Java多线程怎么设置优先级”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!举例说明:我们知道飞机在天上飞行是有固定的航线(可...
      99+
      2023-06-29
    • Java中深度优先与广度优先的示例分析
      这篇文章给大家分享的是有关Java中深度优先与广度优先的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
      99+
      2023-05-30
      java
    • Java遍历树深度优先和广度优先的方法是什么
      这篇文章主要介绍了Java遍历树深度优先和广度优先的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java遍历树深度优先和广度优先的方法是什么文章都会有所收获,下面我们一起来看看吧。在编程生活中,我们...
      99+
      2023-07-05
    • 深入浅析Java中多线程优先级
      这篇文章给大家介绍深入浅析Java中多线程优先级,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java 多线程优先级实例详解线程的优先级将该线程的重要性传递给调度器。尽管CPU处理现有线程集的顺序是不确定的,但是调度器...
      99+
      2023-05-31
      java 多线程 优先级
    • java中setPriority()设置优先级的方法
      这篇文章将为大家详细讲解有关java中setPriority()设置优先级的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用...
      99+
      2023-06-14
    • 用户级线程与内核级线程的调度策略大揭秘
      线程是操作系统中的一种轻量级进程,它与进程共享相同的地址空间,但是拥有自己的独立执行流。线程的出现极大地提高了程序的并发性和可伸缩性。 在操作系统中,线程的调度策略是决定线程如何执行的重要因素。线程的调度策略主要有两种:用户级线程和内核...
      99+
      2024-02-03
      线程;调度策略;用户级线程;内核级线程
    • 如何进行Java线程同步的优先级介绍
      这篇文章给大家介绍如何进行Java线程同步的优先级介绍,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java线程同步在使用的时候需要我们主要很多的事情,下面我们就来看看如何才能更好的使用这个语法呢?首先我们来看看线程的...
      99+
      2023-06-17
    • Python自带的优先级调度器有什么用
      本篇内容主要讲解“Python自带的优先级调度器有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python自带的优先级调度器有什么用”吧!Python 自带一个调度器模块sched,它能...
      99+
      2023-06-15
    • 操作系统线程管理中的优先级调度:平衡公平性和效率
      优先级调度概述 优先级调度是一种线程调度算法,它基于为每个线程分配的优先级来决定哪个线程将获得CPU时间。优先级较高的线程具有优先访问CPU资源的权限,这意味着它们更有可能比优先级较低的线程更频繁地执行。 公平性与效率的平衡 优先级调度...
      99+
      2024-03-04
      线程调度、优先级调度、公平性、效率、操作系统
    • 操作系统线程管理中的死锁与优先级
      死锁 死锁发生在两个或多个线程相互等待资源时,导致所有线程都被阻塞。为了避免死锁,操作系统使用预防、避免、检测和恢复等技术。 优先级 优先级是一个整数,用于指示线程的相对重要性。较高优先级的线程将比较低优先级的线程优先访问资源。优先级有助...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作