hbf548

多看源码多读书

0%

线程的优先级

Java提供一个线程调度器来监控程序中启动后进 入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。

  • 线程的优先级用数字表示,范围从1~10.

    1
    2
    3
    Thread.MIN PRIORITY=1; //最小
    Thread.MAX_ PRIORITY = 10; //最大
    Thread.NORM_ PRIORITY = 5; //默认

    使用以下方式改变或获取优先级

    1
    2
    3
    4
    //获取线程优先级
    getPriority()
    //设置线程优先级
    setPriority(int xxx)
  • JAVA调度方法:

    • 同优先级线程组成先进先出队列(先到先服务),使用时间片策略
    • 对高优先级,使用优先调度的抢占式策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//测试线程的优先级
public class TestPriority {
public static void main(String[] args) {
//主线程的优先级
System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());

MyPriority myPriority = new MyPriority();

Thread t1 = new Thread(myPriority);
Thread t2 = new Thread(myPriority);
Thread t3 = new Thread(myPriority);
Thread t4 = new Thread(myPriority);
Thread t5 = new Thread(myPriority);
Thread t6 = new Thread(myPriority);

//先设置优先级再启动
t1.start();

t2.setPriority(1);
t2.start();

t3.setPriority(4);
t3.start();

t4.setPriority(Thread.MAX_PRIORITY); //MAX_PRIORITY = 10
t4.start();

t5.setPriority(8);
t5.start();

t6.setPriority(7);
t6.start();
}
}

class MyPriority implements Runnable{

@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
}
}
image.png 优先级低只是意味着获得调度的概率低. 并不是优先级低就不会被调用了. 这都是看CPU的调度