返回介绍

2.6 先干重要的事:线程优先级

发布于 2024-08-21 22:20:21 字数 1866 浏览 0 评论 0 收藏 0

Java中的线程可以有自己的优先级。优先级高的线程在竞争资源时会更有优势,更可能抢占资源,当然,这只是一个概率问题。如果运气不好,高优先级线程可能也会抢占失败。由于线程的优先级调度和底层操作系统有密切的关系,在各个平台上表现不一,并且这种优先级产生的后果也可能不容易预测,无法精准控制,比如一个低优先级的线程可能一直抢占不到资源,从而始终无法运行,而产生饥饿(虽然优先级低,但是也不能饿死它呀)。因此,在要求严格的场合,还是需要自己在应用层解决线程调度问题。

在Java中,使用1到10表示线程优先级。一般可以使用内置的三个静态标量表示:

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

数字越大则优先级越高,但有效范围在1到10之间。下面的代码展示了优先级的作用。高优先级的线程倾向于更快地完成。

01 public class PriorityDemo {
02   public static class HightPriority extends Thread{
03     static int count=0;
04     public void run(){
05       while(true){
06         synchronized(PriorityDemo.class){
07           count++;
08           if(count>10000000){
09             System.out.println("HightPriority is complete");
10             break;
11           }
12         }
13       }
14     }
15   }
16   public static class LowPriority extends Thread{
17     static int count=0;
18     public void run(){
19       while(true){
20         synchronized(PriorityDemo.class){
21           count++;
22           if(count>10000000){
23             System.out.println("LowPriority is complete");
24             break;
25           }
26         }
27       }
28     }
29   }
30
31   public static void main(String[] args) throws InterruptedException {
32     Thread high=new HightPriority();
33     LowPriority low=new LowPriority();
34     high.setPriority(Thread.MAX_PRIORITY);
35     low.setPriority(Thread.MIN_PRIORITY);
36     low.start();
37     high.start();
38   }
39 }

上述代码定义两个线程,分别为HightPriority设置为高优先级,LowPriority为低优先级。让它们完成相同的工作,也就是把count从0加到10000000。完成后,打印信息给一个提示,这样我们就知道谁先完成工作了。这里要注意,在对count累加前,我们使用synchronized产生了一次资源竞争。目的是使得优先级的差异表现得更为明显。

大家可以尝试执行上述代码,可以看到,高优先级的线程在大部分情况下,都会首先完成任务(就这段代码而言,试运行多次,HightPriority总是比LowPriority快,但这不能保证在所有情况下,一定都是这样)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文