线程优先级,意外输出

时间:2018-03-13 12:29:29

标签: java

我有以下代码:

class Counter2 extends Thread {

     public Counter2(String s) {
        super(s);
     }; 

     public void run() {
       Thread thread = currentThread();
       for (long count = 0; count <= 1; ++count)
            System.out.println(thread + "COUNT:" + count);
   }
}

public class ThreadTest {

    public static void main(String[] args) {
         Thread secondThread = new Counter2("second");
         Thread thirdThread = new Counter2("third");
         thirdThread.setPriority(8);
         secondThread.start();
         thirdThread.start();
    }
} 

运行程序时,我希望得到以下输出:

主题[第三,如图8所示,主] COUNT:0

主题[第三,如图8所示,主] COUNT:1

主题[第二,如图5所示,主] COUNT:1

主题[第二,如图5所示,主] COUNT:0

相反,我每次执行程序时都会以不同的顺序得到不同的结果,似乎java同时在两个线程上执行该方法,但我认为它会优先考虑具有更高优先级的方法?

1 个答案:

答案 0 :(得分:3)

除非您明确地同步访问以确定操作的顺序,否则您不能期望来自此类线程程序的任何特定输出,如果您这样做,则优先级根本不重要。

设置优先级并不能保证特定的顺序,它只是尝试优先考虑一个线程与另一个线程的优先级,但有很多事情会影响线程的执行,而你不太可能看到你的内容。 #39;希望。

如果您曾经在某种VIP或优先级线上,并且您已经注意到非VIP人员的服务速度更快,那么这也发生在计算机内部。