Java 线程优先级

原文:https://www.studytonight.com/java/thread-priorities-in-java.php

一个线程的优先级描述了它多早得到执行并被线程调度器选择。在 Java 中,当我们创建一个线程时,总是会给它分配一个优先级。在多线程环境中,处理器为线程调度器分配优先级。优先级由 JVM 或程序员自己明确给出。优先级的范围在 1 到 10 之间,有三个常量变量是静态的,用于获取线程的优先级。它们如下:

1.公共静态 int MIN_PRIORITY

它持有可以给予线程的最低优先级。该值为 1。

2.公共静态 int NORM_PRIORITY

如果没有定义,它是给线程的默认优先级。该值为 0。

3.公共静态 int MAX_PRIORITY

这是可以赋予线程的最大优先级。这个的值是 10。

获取和设置线程优先级中的方法

1。公共最终 intgetPriority()

在 Java 中,getPriority()方法在 java.lang.Thread 包中。它用于获取线程的优先级。

2。公共最终无效设置优先级(intnewPriority)

在 Java 中,setPriority(intnewPriority)方法在 java.lang.Thread 包中。它用于设置线程的优先级。如果新优先级的值高于最小和最大限制,则 setPriority()方法将引发 IllegalArgumentException。

示例:获取线程优先级

如果我们不设置线程的线程优先级,那么默认情况下它是由 JVM 设置的。在这个例子中,我们使用getPriority()方法获得线程的默认优先级。

    class MyThread extends Thread 
{ 
    public void run() 
    { 
        System.out.println("Thread Running..."); 
    } 

    public static void main(String[]args) 
    { 
        MyThread p1 = new MyThread(); 
        MyThread p2 = new MyThread(); 
        MyThread p3 = new MyThread(); 
        p1.start();
        System.out.println("P1 thread priority : " + p1.getPriority()); 
        System.out.println("P2 thread priority : " + p2.getPriority());  
        System.out.println("P3 thread priority : " + p3.getPriority()); 

    } 
}

P1 线程优先级:5 线程运行...P2 线程优先级:5 P3 线程优先级:5

示例:线程常数

我们可以通过使用 thread 类提供的一些预定义常数来获取线程的优先级。这些常量返回线程的最大、最小和正常优先级。

     class MyThread extends Thread 
{ 
    public void run() 
    { 
        System.out.println("Thread Running..."); 
    } 

    public static void main(String[]args) 
    { 
        MyThread p1 = new MyThread(); 
        p1.start();
        System.out.println("max thread priority : " + p1.MAX_PRIORITY); 
        System.out.println("min thread priority : " + p1.MIN_PRIORITY);  
        System.out.println("normal thread priority : " + p1.NORM_PRIORITY); 

    } 
}

线程运行...最大线程优先级:10 分钟线程优先级:1 正常线程优先级:5

示例:设置优先级

要设置线程的优先级,使用Thread类的setPriority()方法。它采用一个必须介于 1 和 10 之间的整数参数。请参见下面的示例。

     class MyThread extends Thread 
{ 
    public void run() 
    { 
        System.out.println("Thread Running..."); 
    } 

    public static void main(String[]args) 
    { 
        MyThread p1 = new MyThread();
        // Starting thread
        p1.start();
        // Setting priority
        p1.setPriority(2);
        // Getting priority
        int p = p1.getPriority();

        System.out.println("thread priority : " + p);  

    } 
}

线程优先级:2 线程运行...

示例:

在这个例子中,我们设置了两个线程的优先级,并运行它们来查看线程优先级的效果。设置更高优先级的线程会先得到 CPU 吗?见下面的例子。

     class MyThread extends Thread 
{ 
    public void run() 
    { 
        System.out.println("Thread Running... "+Thread.currentThread().getName()); 
    } 

    public static void main(String[]args) 
    { 
        MyThread p1 = new MyThread();
        MyThread p2 = new MyThread();
        // Starting thread
        p1.start();
        p2.start();
        // Setting priority
        p1.setPriority(2);
        // Getting -priority
        p2.setPriority(1);
        int p = p1.getPriority();
        int p22 = p2.getPriority();

        System.out.println("first thread priority : " + p);  
        System.out.println("second thread priority : " + p22);

    } 
}

线程运行...线程 0 第一线程优先级:5 第二线程优先级:1 线程正在运行...线程 1

注意:线程优先级不能保证优先级较高的线程总是比优先级较低的线程先执行。执行线程的选择取决于依赖于平台的线程调度器。