gpt4 book ai didi

java - 为什么要创建延迟,首选对 Thread.sleep 的静态引用而不是 this.sleep?

转载 作者:行者123 更新时间:2023-12-04 20:39:36 25 4
gpt4 key购买 nike

在下面的代码中,编译器建议我使用 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();
}
}

Also attached the image to make it more visible

最佳答案

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

在这个特殊情况下,它不是非常误导,但它仍然不好。考虑一下这个更糟糕的情况:

CThreadUsingThread thread  = new CThreadUsingThread();
thread.start();
thread.sleep(1000);

哪个线程看起来会进入休眠状态?它实际上要让哪个线程进入休眠状态?

顺便说一句,我还会:

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

关于java - 为什么要创建延迟,首选对 Thread.sleep 的静态引用而不是 this.sleep?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com