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

Rus*_*iye 1 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

请回复

Jes*_*per 9

Thread.sleep(long millis)是一种static方法,它允许当前线程(即调用此方法的线程)休眠指定的毫秒数.

在您给出的示例中,主线程将休眠5秒 - 而不是t1引用的线程.

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