这个代码中哪个线程正在睡觉?主线程还是t1线程?

时间:2018-05-23 06:03:49

标签: java multithreading

一般来说主线程先启动然后用户线程启动,但是在下面的代码中我无法弄清楚主线程是睡眠还是t1线程。

MessageGenerator.java

public class MessageGenerator implements Runnable {
    String msg;
    public MessageGenerator(String msg) {
        super();
        this.msg = msg;
    }
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+" Running");
        System.out.println(msg);
    }
}

MainClass.java

public class MainClass {

    public static void main(String[] args) throws InterruptedException {

        Thread t1=new Thread(new MessageGenerator("Hello"));
        t1.sleep(5000); //Confused here
        t1.start();
        Thread t2=new Thread(new MessageGenerator("Hi"));
        t2.start();
        System.out.println(Thread.currentThread().getName()+" Running");
    }
}

请回复

3 个答案:

答案 0 :(得分:9)

Thread.sleep(long millis)是一种@PostMapping("/top") public void addTop(@RequestBody Node node){ nodeRepository.saveTop(node.getId(),node.getName()); } 方法,它允许当前线程(即调用此方法的线程)休眠指定的毫秒数。

在您给出的示例中,主线程将休眠5秒 - static引用的线程。

代码具有误导性,因为您在实例上调用t1方法。

答案 1 :(得分:0)

Sleep是Thread类的静态方法,它应该被称为Thread.sleep(long millisec)

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统定时器和调度程序的精度和准确性。该线程不会失去任何监视器的所有权。

答案 2 :(得分:0)

主线程将睡眠...为5000毫秒。 sleep()是一个静态方法,它总是引用当前正在执行的thread.so它调用主线程,所以主线程将睡眠。