Java线程优先级变量及功能

目录
  • 前言:
  • Java线程优先级示例
  • Java线程优先级的优势
  • 结论

前言:

线程被称为“最小的处理单元”,是一个轻量级的子进程,分配了一些需要执行的工作。线程共享分配给它们的相同内存插槽,并且彼此独立,因此促进了多任务处理。但是,当多个线程在共享内存插槽上运行时,必然会发生资源竞争。为了避免这种竞争,从而实现高吞吐量,引入了线程优先级的概念。当多个任务在同一个系统上运行时,它具有重要意义。“线程调度器根据优先级分配执行线程”。

JVM(JAVA虚拟机)默认或由程序员明确地决定线程的优先级。优先级在1到10之间,当我们想给线程最高优先级时,就分配10。上下文切换有助于根据优先级顺序从线程1过渡到线程2等等。

注意:可能有两个或更多线程被分配了相同的优先级,那么它们的执行取决于操作系统。例如,Windows使用循环算法来处理这种情况。

Java线程优先级的变量

JAVA中以宏的形式预先保存了三个主要变量,如下所述-

  • Public Static int MIN_PRIORITY:这是一个静态变量,带有“Public”类型的访问修饰符。此变量的值为1。这是为了分配一个优先级最低的线程。
  • Public Static int NORM_PRIORITY:这是一个静态变量,带有“Public”类型的访问修饰符。该变量的值为5。这是为了分配一个具有正常优先级的线程。当开发人员未明确分配优先级时,它是默认优先级。
  • Public Static int MAX_PRIORITY:这是一个静态变量,带有“Public”类型的访问修饰符。该变量的值为10。这是为了分配一个具有最高优先级的线程。

与获取和设置优先级相关的一些功能包括:

  • Public Final int getPriority():此函数用于获取请求的任何线程的优先级。此函数返回一个整数,因为其返回类型为“int”。整数的范围可以在1到10之间。该功能是公开的和最终的。
  • Public Final void setPriority(int newPriority):此函数用于设置请求的任何线程的优先级。该函数将整数作为参数,函数定义中的参数原型中也提到了这一点。参数整数的范围可以在1到10之间。该功能是公开的和最终的。

Java线程优先级示例

以下是java线程优先级的示例:

下面是一些示例,使用上面已经定义的变量和JAVA中可用的现成函数来演示线程优先级的概念。

代码:

public class test extends Thread{
public void run (){
System.out.println ( "The name of thread running curremtly is :"+Thread.currentThread ().getName ());
System.out.println ( "The priority od thread running currently is:"+Thread.currentThread ().getPriority ());
}
public static void main (String args[]){
test t1=new test ();
test t2=new test ();
test t3=new test ();
t1.setPriority (Thread.MIN_PRIORITY);
t2.setPriority (Thread.MAX_PRIORITY);
t3.setPriority (Thread.NORM_PRIORITY);
t1.start ();
t2.start ();
t3.start ();
}
}

输出:

示例2:

下面是一个用户定义的优先级定义和打印示例。

代码:

public class test2 extends Thread
{
public void run ()
{
System.out.println ( " The control is under run function now...");
}
public static void main (String args[])
{
// Here we are creating threads using the constructors.
test2 t1=new test2 ();
test2 t2=new test2 ();
// setpriority () function is used below along with the parameter to set the prioirity.
t1.setPriority (2);
t2.setPriority (9);
// Here we are coding on how to display output strings.
System.out.println ( " The priority assigned to thread t1 is: " + t1.getPriority ());
System.out.println ( "The priority assigned to thread t2 is: " + t2.getPriority ());
// the run () function is defined above will be called via start () function and print the strinf which is there in it.
t1.start ();
}
}

输出:

注意:优先级应严格在1到10之间。如果优先级超出此范围,编译器将抛出以下错误。当使用setPriority()函数设置线程t2的优先级时,13被赋予了一个优先级,而不是9。

异常情况:

Exception in thread “main” java.lang.IllegalArgumentException
at java.base/java.lang.Thread.setPriority (Thread.java:1141)
at test2.main (test2.java:14)

Java线程优先级的优势

多线程和将优先级分配给以下线程有很多好处:

  • 它允许在系统中同时执行多个操作,以及线程的优先级。例如,用户正在网上冲浪,但在安装新软件时突然中断了系统。在这种情况下,优先考虑重新启动系统,而不是上网。
  • 如果程序员没有明确定义线程优先级,JAVA线程将从父线程继承其优先级。存在绕过下游线程中的优先级并保持对称性的优先级保留。这使得程序员很容易调试程序。
  • 它使代码更简单,因此易于维护。
  • 通过分配优先级,它使上下文切换的工作变得更加容易。

结论

这是在同一个系统中操作多个任务的广泛使用且高效的方法之一。由于线程共享内存,因此这种内存有效的方式也是如此。我们可以在系统中运行多个线程,但这可能会混淆处理器,首先选择哪个线程。通过为线程分配优先级,这个问题得以解决。线程继续运行,直到它完成或被优先级更高的线程中断。此功能与操作系统密切配合。

到此这篇关于Java线程优先级变量及功能的文章就介绍到这了,更多相关Java线程优先级内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java线程优先级和守护线程原理解析

    一.线程优先级的介绍 java 中的线程优先级的范围是1-10,默认的优先级是5."高优先级线程"会优先于"低优先级线程"执行. java 中有两种线程:用户线程和守护线程.可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是"用户线程":否则就是"守护线程".用户线程一般用于执行用户级任务,而守护线程也就是"后台线程",一般用来执行后台任务.需要注意的是:Java虚拟机在&quo

  • Java多线程编程之限制优先级

    限制线程优先级和调度 Java 线程模型涉及可以动态更改的线程优先级.本质上,线程的优先级是从 1 到 10 之间的一个数字,数字越大表明任务越紧急.JVM 标准首先调用优先级较高的线程,然后才调用优先级较低的线程.但是,该标准对具有相同优先级的线程的处理是随机的.如何处理这些线程取决于基层的操作系统策略.在某些情况下,优先级相同的线程分时运行:在另一些情况下,线程将一直运行到结束.请记住,Java 支持 10 个优先级,基层操作系统支持的优先级可能要少得多,这样会造成一些混乱.因此,只能将优先

  • Java 线程优先级详解及实例

    Java 线程优先级详解及实例 操作系统基本采用时分的调度运行线程,操作系统会分出一个个时间片,线程会被分配到若干个时间片,当线程的时间片用完了就会发生线程调度,并且等待着下次调度,线程被分配到的时间片多少也就决定了线程使用处理器资源的多少,而线程优先级就是决定线程能够分配多少处理器资源的线程属性. 在Java多线程中,通过一个整形变量priority来控制优先级,优先级的范围从1-10.默认是5,优先级越高越好. public class Priority { public static vo

  • Java线程优先级示例代码

    使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载.Java线程的优先级也差不多,优先级越高排程器就会给它越多的CPU执行时间,但请注意:如果有多个线程在等待一个机锁的时候,并不是优先级越高就可以越早执行. 复制代码 代码如下: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import jav

  • Java 多线程优先级实例详解

    Java 多线程优先级实例详解 线程的优先级将该线程的重要性传递给调度器.尽管CPU处理现有线程集的顺序是不确定的,但是调度器将倾向于让优先权最高的线程先执行. 你可以用getPriority()来读取现有线程的优先级,并且在任何时刻都可以通过setPriority()来修改优先级. import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SimplePrio

  • 详解Java的线程的优先级以及死锁

    Java线程优先级 需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock).死锁发生在当两个线程对一对同步对象有循环依赖关系时.例如,假定一个线程进入了对象X的管程而另一个线程进入了对象Y的管程.如果X的线程试图调用Y的同步方法,它将像预料的一样被锁定.而Y的线程同样希望调用X的一些同步方法,线程永远等待,因为为到达X,必须释放自己的Y的锁定以使第一个线程可以完成.死锁是很难调试的错误,因为: 通常,它极少发生,只有到两线程的时间段刚好符合时才能发生. 它可能包含多于两个的线程和同步

  • Java线程的调度与优先级详解

    目录 示例: 1.定义一个线程执行体,异步执行: 2.创建10个线程,并设置不同的线程优先级,来执行线程执行体: 3.运行结果: 总结 由于CPU的计算频率非常高,每秒计算数十亿次,因此可以将CPU的时间从毫秒的维度进行分段,每一小段叫作一个CPU时间片. 目前操作系统中主流的线程调度方式是:基于CPU时间片方式进行线程调度.线程只有得到CPU时间片才能执行指令,处于执行状态,没有得到时间片的线程处于就绪状态,等待系统分配下一个CPU时间片.由于时间片非常短,在各个线程之间快速地切换,因此表现出

  • java线程优先级原理详解

    java 中的线程优先级的范围是1-10,默认的优先级是5.10最高. MIN_PRIORITY 1 MAX_PRIORITY 10 NORM_PRIORITY 5 优先级高的获得cpu的几率更大些,不是优先级高的就先执行完,线程优先级随机特性 在java中,线程的优先级具有继承性,例如A线程启动B线程,则A和B的优先级是一样的 线程创建后,可通过调用setPriority()方法改变优先级. public class Test5 { public static class TheadT ext

  • Java 线程的优先级(setPriority)案例详解

    线程可以划分优先级,优先级高的线程得到的CPU资源比较多,也就是CPU优先执行优先级高的线程对象中的任务. 设置线程优先级有助于帮助线程规划器确定下一次选中哪一个线程优先执行. java中优先级分为1-10个级别 线程优先级的继承特性 例如a线程启迪b线程,则b线程的优先级与a的一样. 代码说话:(很简单) public class MyThread1 extends Thread { @Override public void run() { System.out.println("MyThr

  • Java线程优先级变量及功能

    目录 前言: Java线程优先级示例 Java线程优先级的优势 结论 前言: 线程被称为“最小的处理单元”,是一个轻量级的子进程,分配了一些需要执行的工作.线程共享分配给它们的相同内存插槽,并且彼此独立,因此促进了多任务处理.但是,当多个线程在共享内存插槽上运行时,必然会发生资源竞争.为了避免这种竞争,从而实现高吞吐量,引入了线程优先级的概念.当多个任务在同一个系统上运行时,它具有重要意义.“线程调度器根据优先级分配执行线程”. JVM(JAVA虚拟机)默认或由程序员明确地决定线程的优先级.优先

  • java线程本地变量ThreadLocal详解

    介绍 ThreadLocal作为JDK1.2以来的一个java.lang包下的一个类,在面试和工程中都非常重要,这个类的主要目的是提供线程本地的变量,所以也有很多地方把这个类叫做线程本地变量 从字面理解,这个类为每个线程都创建了一个本地变量,实际上是ThreadLocal为变量在每个线程中都创建了一个副本,使得每个线程都可以访问自己内部的副本变量 通常提到多线程,都会考虑变量同步的问题,但是ThreadLocal并不是为了解决多线程共享变量同步的问题,而是为了让每个线程的变量不互相影响,相当于线

  • Java查看和修改线程优先级操作详解

    目录 查看和修改线程优先级 1.题目 2.解题思路 3.代码详解 查看和修改线程优先级 1.题目 JAVA中每个线程都有优化级属性,默认情况下,新建的线程和创建该线程的线程优先级是一样的.当线程调度器选择要运行的线程时,会选择优先级高的线程. 实现:查看和修改线程的优先级 2.解题思路 创建一个类:ThreadPriorityTest,继承了JFrame.用来界面显示当前线程组中运行的线程. 定义2个方法: do_this_windowActivated():用来监听窗体激活事件 do_butt

  • Java线程变量ThreadLocal源码分析

    1.ThreadLocal 线程变量,和当前线程绑定的,只保存当前线程的变量,对于其他线程是隔离的,是访问不到里面的数据的. 2.在Looper中使用到了ThreadLocal,创建了一个Looper是保存到了ThreadLocal中. //这里用到了泛型,ThreadLocal中只保存Looper对象. static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); private static

随机推荐