看一道关于Thread.sleep()方法的面试题

看一个Thread.sleep()方法的面试题:

代码:

public class Test06 {
    public static void main(String[] args) {
        // 创建线程对象
        Thread t = new Thread(new MyRun06());
        t.setName("t");
        t.start();

        try {
            // 问题:这行代码会让t线程睡眠5秒钟吗?
            t.sleep(5 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("hello world");

    }
}

class MyRun06 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "-->" + i);
        }
    }
}

解析:
线程的sleep()方法是个静态方法,如果采用引用去调用的话,还是跟对象没有关系。t.sleep(51000); 在执行时还是会转成Thread.sleep(51000)。即让当前线程休眠5秒,跟t线程对象没有关系。所以并不会让t线程休眠。

在main主线程休眠的5秒中,t线程早就执行完了,因为5秒钟循环100次,对计算机来说太简单了。
所以应该是先很快打印出“0-99”,再输出“hello world”。

你可能感兴趣的:(JavaSE,java,sleep方法)