gpt4 book ai didi

java - 当在线程对象上调用 start 时,在线程上设置的优先级不起作用

转载 作者:行者123 更新时间:2023-11-30 05:47:14 25 4
gpt4 key购买 nike

我执行了以下代码:

public class TestMain extends Thread{

public static Runnable getRunnableObject(){
Runnable r = new Runnable(){
@Override
public void run() {
System.out.println("inside runnable");
}
};

return r;
}

public static void main(String args[]){
Thread t2 = new Thread(getRunnableObject());
// t2.start();
System.out.println("name "+t2.getName()+" id "+t2.getPriority()+" class "+t2.getClass()
+" priortity "+t2.getPriority()+" state "+t2.getState()+" alive/dead "+t2.isAlive());

System.out.println("runtime"+Runtime.getRuntime().availableProcessors());
t2.setPriority(MAX_PRIORITY);
System.out.println(t2.getPriority());

t2.setPriority(MIN_PRIORITY);
System.out.println(t2.getPriority());

t2.setPriority(NORM_PRIORITY);
System.out.println(t2.getPriority());
}
}

输出:

name Thread-0 id 5 class class java.lang.Thread priortity 5 state NEW alive/dead false
runtime4
10
1
5

现在我再次运行它,取消第 22 行代码的注释。

输出2:

inside runnable
name Thread-0 id 5 class class java.lang.Thread priortity 5 state RUNNABLE alive/dead true
runtime4
5
5
5

你能告诉我为什么当我在线程上调用 start() 时设置优先级不起作用吗?

最佳答案

这是一个竞争条件。

当您尝试设置t2的优先级时,它已经死了。如果您将 Runnable 更改为阻塞一段时间,如下所示:

Runnable r = new Runnable() {

@Override
public void run() {
System.out.println("inside runnable");
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
//
}
}
}

然后您将得到相同的序列 10, 1, 5。

关于java - 当在线程对象上调用 start 时,在线程上设置的优先级不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633348/

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