请看如下代码:
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啊?

解决方案 »

  1.   

    Thread.currentThread().sleep(5000);                 // 优先级高的不是先运行吗??运行不就休眠了吗
      

  2.   

    我用楼主的代码运行了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楼主的思路理论上是正确的.但是出现这个问题原因我水平太低解释不清,不管哪本书上都建议过不要用线程的优先级来控制线程之间执行的先后顺序.