线程被称为“最小处理单元”,是一个轻量级子进程,分配了一些需要执行的工作。线程共享分配给它们的相同内存槽并且彼此独立,从而促进多任务处理。但是当多个线程在共享内存槽上运行时,必然会发生资源竞争。为了避免这种竞争从而实现高吞吐量,引入了线程优先级的概念。当多个任务在同一系统上运行时,它具有很大的意义。 “线程调度程序负责根据优先级分配执行线程的工作”。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
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 中可用的现成函数演示线程优先级概念。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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
下面是用户自定义优先级定义和打印的示例。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class test2 extends Thread
{
public void run ()
{
System.out.println ( " The control is under run function now..." );
}
public static void main (String args[])
{
test2 t1= new test2 ();
test2 t2= new test2 ();
t1.setPriority (2);
t2.setPriority (9);
System.out.println ( " The priority assigned to thread t1 is: " + t1.getPriority ());
System.out.println ( "The priority assigned to thread t2 is: " + t2.getPriority ());
t1.start ();
}
}
|
登录后复制
输出:

注意: 优先级应严格落在 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中文网其他相关文章!