关于线程中sleep和优先级的一个问题
请看如下代码:
public class ThreadTestSleep implements Runnable {
public void run() {
for (int k = 0; k < 5; k++) {
if (k == 2) {
try {
Thread.currentThread().sleep(5000);
} catch (Exception e) {}
}
System.out.println(Thread.currentThread().getName()
+ " : " + k);
}
}
public static void main(String[] args) {
Runnable r = new ThreadTestSleep();
Thread t1 = new Thread(r, "t1_name ");
Thread t2 = new Thread(r, "t2_name ");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}
---------------------
运行结果:
t1_name : 0
t2_name : 0
t1_name : 1
t2_name : 1
t2_name : 2
t1_name : 2
t2_name : 3
t1_name : 3
t2_name : 4
t1_name : 4
------------------
问题如下:
我不明白的是t1比t2的优先级要高。sleep之后为什么t2先打印出来的内容,t1后打印出来了内容呢?t2也要进行sleep啊?
------解决方案--------------------Thread.currentThread().sleep(5000);
// 优先级高的不是先运行吗??运行不就休眠了吗
------解决方案--------------------上面说的不对吧,优先级高的是先休眠,可是它也是时间到後,也是先醒来。
这时优先级低也应该是在睡眠,所以应该始终是t1先被打出来
------解决方案--------------------我用楼主的代码运行了5次,每次的结果都是
t1_name : 0
t1_name : 1
t2_name : 0
t2_name : 1
t1_name : 2
t1_name : 3
t1_name : 4
t2_name : 2
t2_name : 3
t2_name : 4
楼主的思路理论上是正确的.但是出现这个问题原因我水平太低解释不清,不管哪本书上都建议过不要用线程的优先级来控制线程之间执行的先后顺序.