在Java中运行线程时,更改线程优先级的条件是什么?
使用此代码:在Java中运行线程时,更改线程优先级的条件是什么?,java,multithreading,java-threads,Java,Multithreading,Java Threads,使用此代码: public static void main(String[] args) throws InterruptedException { MyThread testThread = new MyThread(); System.out.println(testThread.getPriority()); testThread.start(); System.out.println(testThread.getPriority()); t
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。这是为什么?是什么决定了线程优先级是否更改?如果更改已运行线程的优先级,则不会产生任何效果。例如:
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())的情况下运行代码代码>-您将看到,在一种情况下(当该行被注释时),线程不再处于活动状态(与该行未被注释时不同)。这就是预期的结果。非常感谢您的回答!getPriority()
如何在额外的时间内保持线程的活动状态?@Beo这只是线程调度如何发生的一个工件,请记住,即使我们在这里讨论的行为也不能保证。您可以添加一个简单的testThread.start();锁支持.parknos(时间单位.秒.toNanos(1))代码>并请注意,代码现在已更改。。。