在java中运行线程时,改变线程优先级的条件是什么?

nbewdwxp  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(363)

使用此代码:

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。为什么会这样?是什么决定了线程优先级是否改变?

olqngx59

olqngx591#

如果更改已经运行的线程的优先级,则没有任何效果。例如:

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 再也没有了(不像那行没有注解的时候)。从而达到了预期的效果。

相关问题