gpt4 book ai didi

java - 在本例中,为什么优先级较低的线程没有在优先级较高的线程之后执行?

转载 作者:行者123 更新时间:2023-12-02 02:46:05 27 4
gpt4 key购买 nike

MyThread 类扩展了 Thread {

public void run() {

for (int i = 0; i < 10; i++) {
System.out.println("Child Thread:" + i);
}
}

}

公共(public)类ThreadPriorityProperDemo {

public static void main(String[] args) {
MyThread t=new MyThread();
t.setPriority(10);
System.out.println("Main Priority:"+Thread.currentThread().getPriority());
System.out.println("Child Priority:"+t.getPriority());
System.out.println("-----------------------------------");
t.start();
for (int i = 0; i < 10; i++) {
System.out.println("Parent Thread:" + i);
}

}

}

理想的输出应该是:

主要优先级:5

子优先级:10

子线程:0

子线程:1

子线程:2

子线程:3

子线程:4

子线程:5

子线程:6

子线程:7

子线程:8

子线程:9

父线程:0

父线程:1

父线程:2

父线程:3

父线程:4

父线程:5

父线程:6

父线程:7

父线程:8

父线程:9

但是我得到的输出是混合的..为什么?我使用的是 Ububtu 16.04 LTS

最佳答案

您在Oracle documentation中有一个答案元素.

The JVM defines a range of ten logical priorities for Java threads,including:

java.lang.Thread.MIN_PRIORITY = 1

java.lang.Thread.NORM_PRIORITY = 5

java.lang.Thread.MAX_PRIORITY = 10

...

A JVM is free to implement priorities in any way it chooses, including ignoring the value.

此外,即使 JVM 完全尊重优先级,多核 CPU 也可以并行运行两个线程。
仅当 Activity 线程数超过 CPU 可以同时运行的进程数时,优先级才可见(对于超线程 CPU = Core * Core 的线程数)。

最后,为短任务设置优先级或设置可能不会真正应用的优先级,因为之前解释的条件不成立(您的并发线程数少于 CPU 能够处理的线程数)将对应用程序的性能:

Calling the Thread.setPriority method may be an expensive operation.Frivolous priority adjustments can reduce performance.

关于java - 在本例中,为什么优先级较低的线程没有在优先级较高的线程之后执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com