java线程中的优先级问题

public class TestPriority_2{
public static void main(String[] args)
{
Thread t1 = new Thread(new T1());
Thread t2 = new Thread(new T2());
t1.setPriority(Thread.NORM_PRIORITY + 3);
t1.start();
t2.start();
}
}

class T1 implements Runnable {
public void run() {
for(int i=0; i<100; i++) {
System.out.println("T1: " + i);
}
}
}

class T2 implements Runnable {
public void run() {
for(int i=0; i<100; i++) {
System.out.println("T2: " + i);
}
}
}
t1的优先级已经设置比t2大了,按理说是先把t1的输出完再输出t2,为什么实际输出时确实仍然不按顺序的输出?
这是我看的视频教学的源代码,在视频里能正确运行,为什么到了我这里运行起来却不按顺序?

楼主请记住一点,多线程的执行本身就是多个线程的交换执行,并非同时执行,执行的优先级只是他执行的概率。
例如原本优先级一样,那么两个线程的执行的概率都为50%。现在我们提高其中一个,那么一个为60%的概率抢到进入CPU执行的机会,另一个是依旧是40%。执行完一次之后又要重新抢占CPU。但是40%概率进入的线程也有可能抢到,虽然概率低了点,但总会有他执行的机会,万一次次都抽中40%的概率呢?所以你要正确理解线程和线程之间的优先级
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-12
每个类都有自己的优先级,一般property用1-10的整数表示,默认优先级是5,优先级最高是10;优先级高的线程并不一定比优先级低的线程执行的机会高,只是执行的机率高;默认一个线程的优先级和创建他的线程优先级相同;
相似回答