根据这一守则:
public static void main(String[] args) throws InterruptedException {
MyThread testThread = new MyThread();
System.out.println(testThread.getPriority());
testThread.start();
System.out.println(testThread.getPriority());
testThread.setPriority(7);
System.out.println(testThread.getPriority());
}我得到一个setPriority按预期工作的输出-输出为5-5-7。但是,当注释掉顶部的getPriority时,如下所示:
public static void main(String[] args) throws InterruptedException {
MyThread testThread = new MyThread();
//System.out.println(testThread.getPriority());
testThread.start();
System.out.println(testThread.getPriority());
testThread.setPriority(7);
System.out.println(testThread.getPriority());
}优先级一点也不改变,我得到了5-5的输出。这是为什么,是什么决定了线程优先级是否被更改?
发布于 2021-04-24 14:08:27
如果更改已经运行的线程的优先级,则不会产生任何影响。例如:
MyThread testThread = new MyThread();
System.out.println(testThread.getPriority());
testThread.start();
// sleep for 1 second, making sure that testThread is done
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));
// reports false
System.out.println(testThread.isAlive());
System.out.println(testThread.getPriority());
testThread.setPriority(8);
System.out.println(testThread.getPriority());运行此操作将显示testThread.setPriority(8);没有任何效果,线程已不再活动。
如果我们转到您的示例并添加两个语句:
System.out.println(testThread.getPriority());
System.out.println(testThread.isAlive());
testThread.setPriority(7);
System.out.println(testThread.isAlive());
System.out.println(testThread.getPriority());并运行包含和不包含该System.out.println(testThread.getPriority());的代码--您将看到在一种情况下(当该行被注释时),线程不再是alive (与该行没有注释时不同)。因此,预期的结果。
https://stackoverflow.com/questions/67243368
复制相似问题