盒子
盒子
文章目录
  1. 1. 简介
  2. 2. 示例
  3. 3. 查看

线程的优先级

1. 简介

优先级高的线程可能获得比优先级低的线程更多的运行机会,但并不一定起作用,因为线程是抢占式。有些操作系统如centos6.5,优先级被忽略

Java中Tread分为1-10个级别,默认级别为5

2. 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Temp {

public static void main(String[] args) {
Thread threadOne = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "第" + i + "次执行");
}
});
threadOne.setName("Thread-1");
threadOne.setPriority(Thread.MAX_PRIORITY);

Thread threadTwo = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "第" + i + "次执行");
}
});
threadTwo.setName("Thread-2");
threadTwo.setPriority(Thread.MIN_PRIORITY);

threadOne.start();
threadTwo.start();
}
}

执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Thread-2第0次执行
Thread-2第1次执行
Thread-2第2次执行
Thread-2第3次执行
Thread-2第4次执行
Thread-1第0次执行
Thread-2第5次执行
Thread-2第6次执行
Thread-2第7次执行
Thread-2第8次执行
Thread-2第9次执行
Thread-1第1次执行
Thread-1第2次执行
Thread-1第3次执行
Thread-1第4次执行
Thread-1第5次执行
Thread-1第6次执行
Thread-1第7次执行
Thread-1第8次执行
Thread-1第9次执行

由结果看来,优先级高的Thread-1执行优先级设置优势并没有显现出来。

3. 查看

使用jps + jstack 查看线程的优先级,其中 prio表示JVM设置的优先级,os_prio表示操作系统线程优先级

1
D:\Project\java\design-pattern>jps -l

执行结果:

1
2
3
4
5
6
7
13360
7728 org.jetbrains.jps.cmdline.Launcher
14164 org.jetbrains.jps.cmdline.Launcher
3396 org.apache.catalina.startup.Bootstrap
9972 sun.tools.jps.Jps
13960 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
2316 Temp
1
D:\Project\java\design-pattern>jstack 2316

执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
"Thread-2" #13 prio=1 os_prio=-2 tid=0x000000001f236000 nid=0x950 waiting on condition [0x000000001fbbf000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at Temp.lambda$main$1(Temp.java:20)
at Temp$$Lambda$2/1023892928.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)

"Thread-1" #12 prio=10 os_prio=2 tid=0x000000001f1d7800 nid=0x1c20 waiting on condition [0x000000001fabf000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at Temp.lambda$main$0(Temp.java:7)
at Temp$$Lambda$1/1078694789.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
支持一下
扫一扫,支持沈健
  • 微信扫一扫
  • 支付宝扫一扫