Java多线程优先级:为什么在这个例子中,有时t1在t2完成之前发生,即使t2具有更高的优先级?

jsh*_*303 5 java multithreading threadpool thread-priority

例:

class MyThread extends Thread{  
public MyThread(String name) {
    super(name);
}

public void run(){
    for (int i=0; i<5; i++) {
        System.out.println(Thread.currentThread().getName()
                +"("+Thread.currentThread().getPriority()+ ")"
                +", loop "+i);
    }
} 
}; 

public class Demo {  
    public static void main(String[] args) {  

    System.out.println(Thread.currentThread().getName()
            +"("+Thread.currentThread().getPriority()+ ")");

    Thread t1=new MyThread("t1");    // t1
    Thread t2=new MyThread("t2");    // t2
    t1.setPriority(1);                // t1 priority 1
    t2.setPriority(10);                //t2 priority 10
    t1.start();                        // start t1
    t2.start();                        // start t2
}  
}
Run Code Online (Sandbox Code Playgroud)

当我执行程序时,有时我输出如下:

//Output1
main(5)
t2(10), loop 0
t2(10), loop 1
t2(10), loop 2
t2(10), loop 3
t2(10), loop 4
t1(1), loop 0
t1(1), loop 1
t1(1), loop 2
t1(1), loop 3
t1(1), loop 4
Run Code Online (Sandbox Code Playgroud)

有时我输出如下:

//Output2
main(5)
t1(1), loop 0
t1(1), loop 1
t1(1), loop 2
t1(1), loop 3
t1(1), loop 4
t2(10), loop 0
t2(10), loop 1
t2(10), loop 2
t2(10), loop 3
t2(10), loop 4 
Run Code Online (Sandbox Code Playgroud)

在其他一些场合,我有输出,其中t1首先开始,t2在t1完成所有输出之前开始.

我认为output1更有意义,因为"优先级较高的线程优先执行优先级较低的线程." 我们如何理解这个例子背后的推理?

小智 2

正如您在帖子中已经提到的:

\n\n
\n

\xe2\x80\x9c 优先级较高的线程优先于优先级较低的线程执行。\xe2\x80\x9d

\n
\n\n

这确实意味着,具有较高优先级的线程比低优先级线程更有可能被执行这并不意味着具有较高优先级的线程将始终先执行/先完成。实际的线程处理取决于操作系统(java 仅使用其运行的操作系统提供的线程库)。

\n