示例:
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
}
}
当我执行程序时,有时候输出如下:
//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
有时我的输出如下:
//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
在其他一些场合,我有输出,其中t1首先开始,t2在t1完成所有输出之前开始。
我认为output1
更有意义“Threads with higher priority are executed in preference to threads with lower priority.”
我们怎样才能理解这个例子背后的推理?
答案 0 :(得分:3)
首先启动您的优先级较低的线程,因此在某些情况下甚至可以在优先级更高的偶数开始之前完成。 5次迭代并不是那么多。 在我的(Windows)机器上,如果我用100替换迭代次数,则首先始终选择优先级较高的线程。
答案 1 :(得分:2)
正如您在帖子中提到的那样:
“优先级较高的线程优先于优先级较低的线程执行。”
这确实意味着,具有较高优先级的线程比低优先级线程具有更高的可能性。它并不意味着优先级较高的线程将始终先执行/先完成。实际的线程处理取决于操作系统(java只使用它运行的操作系统提供的线程库)。
答案 2 :(得分:0)
关于线程优先级的说明: