【问题标题】:Java: Why main class does not extend Thread class [closed]Java:为什么主类不扩展线程类[关闭]
【发布时间】:2013-08-12 09:30:59
【问题描述】:

我们的主类中有一个默认线程,但为什么我们在主类中不扩展线程类。是否以某种方式包含 Thread 类的原因。

这就是我的意思,这是主类:

public class Test{

    public static void main(String[] args) {

        Thread.currentThread().getName();

    }

}

我们使用默认线程,但是为什么一开始我们没有扩展线程类 像这样?

public class Test extends Thread {

     public static void main(String[] args) {

        Thread.currentThread().getName();

    }
}

【问题讨论】:

  • 我们怎么知道你为什么决定你的决定?
  • 1) 也许是我,但我觉得你的问题很混乱。你在问什么?你想解决什么问题? 2) 对于它的价值,大多数人会建议你几乎从不扩展 Thread,而是如果需要,实现 Runnable。
  • 可能是为了不吓跑新手。
  • 我们创建项目时,代码的第一部分是默认的。我的问题是,我们在代码中看到 Thread 类在哪里扩展?
  • 扩展 Thread 的唯一正当理由是更改底层 Thread 行为,例如添加日志记录。如果您只想创建一个具有自己运行行为的新线程,请使用new Thread(myRunnable)。系统必须至少提供一个主线程,因为在你有一个线程可以运行它之前,你不能运行代码来创建一个线程。

标签: java multithreading


【解决方案1】:

你有点困惑。所有代码都在某个线程中运行,但定义此代码的类不需要扩展 Thread。如果不是这样,所有类都必须扩展 Thread,否则你不能调用它们的任何方法。

看下面的类比:

public class Test {
    public static void main(String[] args) {
         System.err.println("foo");
    }
}

现在问问自己,为什么 Test 没有扩展 System,但它使用 System 中的字段和方法。如果你知道这一点,那么你也可以回答你原来的问题。

【讨论】:

  • 啊,明白了,它默认扩展了 java.lang,对吧?
  • 它扩展了 java.lang.Object,但您仍然对 A extends BA uses B 感到困惑。无需扩展即可使用事物。就像在现实世界中一样,你可以和狗一起玩(调用 Dog 方法 play()),而不用成为狗。
  • 那么在这种情况下,我们使用 Thread 对象和方法而不扩展它们?
【解决方案2】:

无论是 life 还是 java ,使用一个东西你都不需要属于同一个层次。

【讨论】:

    【解决方案3】:

    我永远不会让课程扩展Thread。您不会添加任何新行为。

    最好实现Runnable 并将该类交给ThreadExecutor 来为您执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      相关资源
      最近更新 更多