首页 > Java > java教程 > Java线程优先级

Java线程优先级

WBOY
发布: 2024-08-30 16:02:56
原创
414 人浏览过

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

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

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。该函数是 public 和 Final。

Java 线程优先级示例

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

示例#1

下面是一些示例,使用上面已定义的变量和 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 ();
}
}
登录后复制

输出:

Java线程优先级

示例#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 ();
}
}
登录后复制

输出:

Java线程优先级

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

例外:

线程“main”中的异常 java.lang.IllegalArgumentException

位于 java.base/java.lang.Thread.setPriority (Thread.java:1141)

在 test2.main (test2.java:14)

Java 线程优先级的优点

多线程和为线程分配优先级有许多优点,如下所示:

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

结论

这是在同一系统中操作多个任务的广泛使用且有效的方法之一。由于线程共享内存,这种方式也是节省内存的。我们可以让多个线程在系统中运行,但这可能会混淆处理器首先选择哪个线程。通过为线程分配优先级解决了这个问题。该线程将继续运行,直到完成或被更高优先级的线程中断。此功能与操作系统密切配合。准备Word文档,边听音乐边上网,效率并不高,直到多线程这一神奇概念的出现。

以上是Java线程优先级的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板