当前位置: 首页 > 知识库问答 >
问题:

实现可运行接口的线程的子类

窦国源
2023-03-14

我不明白为什么一个实现可运行接口的线程子类不强迫我覆盖run方法。基本上,当我创建实现Runnable的简单类时,它强迫我覆盖run方法。但是当我把普通类变成线程的子类时,它不再强迫我覆盖这个类了。这背后的逻辑是什么?

共有2个答案

水铭晨
2023-03-14

这是因为线程本身实现run()。

@Override
public void run() {
    if (target != null) {
        target.run();
    }
}

默认情况下,它什么也不做。如果我们扩展一个线程,我们就会实现这个方法,这样它就会做一些有用的事情

方韬
2023-03-14

当一个非抽象类声明它实现了一个接口时,这意味着该类必须有接口定义的每个方法的具体实现,但这些实现方法不必在类中显式,它们可以从超类继承。在这个具体的例子中,java。lang.Thread有自己的public void run(),子类继承它,因此实现Runnable的线程子类不需要添加自己的重写来满足编译器的要求(尽管它可能确实有用)。

 类似资料:
  • 问题内容: 我通过实现可运行接口创建了类,然后在项目的其他一些类中创建了许多线程(将近10个)。 如何停止其中一些线程? 问题答案: 在 最简单的 办法就是它,这将导致返回,也可能抛出在某些情况下,其中线程 等待 ,例如,,等。 在方法内部,您需要捕获该异常和/或定期检查该值并执行某些操作(例如,细分)。 注:虽然看起来一样,它有一个讨厌的副作用:调用 清零 的标志,而呼叫没有。 其他非中断方法包

  • 问题内容: 为什么实现Runnable比从Thread类扩展更好的选择? 问题答案: 这样,您就可以 将 计算( what )与执行( when 和/或 how )分离。 使用或,您可以例如向提交许多工作/计算,这将使您计划工作。这是ExecutorService的摘录形式: 与直接使用线程相比,使用/ 给您更大的灵活性。

  • 问题内容: 从什么时候开始在Java中使用线程开始,我发现了以下两种编写线程的方法: 与implements Runnable: 或者,使用extends Thread: 这两个代码块有什么显着区别吗? 问题答案: 是的:是首选的工具。您并不是真的专门研究线程的行为。您只是给它一些运行的机会。这意味着合成是从哲学上讲“更纯净”的方式。 在实践方面,它意味着你可以实现从另一个类扩展为好。

  • 本文向大家介绍Java多线程之Callable接口的实现,包括了Java多线程之Callable接口的实现的使用技巧和注意事项,需要的朋友参考一下 1.接口的定义: 2.Callable和Runnable的异同 先看下Runnable接口的定义 Callable的call()方法类似于Runnable接口中run()方法,都定义任务要完成的工作,实现这两个接口时要分别重写这两个方法,主要的不同之处

  • 问题内容: 我正在一个项目中,该项目有很多由库创建的对象,并且无法访问这些对象的创建过程。 以下代码片段很好地说明了我的问题。 码: 是Clazz在编译时可能会或可能不会实现的接口。 码: 以下代码是我遇到的问题。请注意以下几点: 仅在c是的实例时调用。 并且都是我无法访问的类中的私有方法。 在编译时,将 不 包含名为的方法。 ExampleExecutor 不是 我的课程。我无法以任何方式访问它

  • 问题内容: 一般来说,是否可以限制可以实现接口的类? 更具体地说,通用接口可以将其实现限制为的后代吗? 上下文是对象应以类型安全的方式强制转换为对象。 在用尽所有其他信息源之后,我已经很强烈地预感这是不可能的,但是如果有人可以证明我不满意,我将感到非常高兴! 问题答案: 如果强制转换的能力不是严格必需的,则可以在界面中添加这样的其他方法就足够了: 如果大多数实现实际上都可以扩展,它们可以简单地作为