为什么创建延迟静态引用Thread.sleep是首选而不是this.sleep?

C g*_*ics 2 java static multithreading delay

在下面的代码中,编译器建议我使用Thread.sleep(静态引用)而不是this.sleep,为什么会这样?

public class CThreadUsingThread extends Thread{
    public void run(){
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread running:"+i);

            try {
                // Why Thread.sleep(Math.round(Math.random()*1000)); is preferred?
                this.sleep(Math.round(Math.random()*1000));
            } catch (InterruptedException e) {
                System.err.println("Thread interrupted!");
            }
        }
    }
    public static void main(String [] orgs){
        CThreadUsingThread thread  = new CThreadUsingThread();
        thread.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

还附加图像,使其更加明显

Jon*_*eet 6

基本上,你的代码有误导性.它看起来像你指的是一个特定的线程,当实际上它只是调用静态Thread.sleep哪种方法总是指当前执行的线程.

在这种特殊情况下这不是巨大的误导性,但它仍然不是很好.考虑这个更糟糕的情况:

CThreadUsingThread thread  = new CThreadUsingThread();
thread.start();
thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

它的线程看起来像将派睡觉?它实际上会发送到哪个线程睡觉?

另外,我还要:

  • 避免使用C类的前缀; CThreadUsingThread不是传统的Java名称
  • 首选创建Runnable并将其传递给Thread构造函数,而不是Thread直接子类化.这是一个更清晰的代码分离,它明确地涉及线程和代码,它只是给线程一些代码来运行.