【问题标题】:Why do we need to override run() method extending thread class [duplicate]为什么我们需要覆盖扩展线程类的run()方法[重复]
【发布时间】:2016-05-13 07:15:27
【问题描述】:

为什么我们在扩展thread类的时候需要重写run方法。只要我知道当我们扩展一个类时,我们就会覆盖抽象的方法。但是run方法有定义public void main()。为什么必须覆盖它。

【问题讨论】:

    标签: java


    【解决方案1】:

    线程的本质是它运行一些东西......所以线程抽象自然会要求你提供一些东西来运行。这在 Java 中通过要求您实现 run() 来完成。

    【讨论】:

      【解决方案2】:

      https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#run()

      因为 Thread 实现了 Runnable 并且它有一个 run() 方法,它没有任何实现(他们无法预测你想要“运行”什么)

      因此,当你扩展 Thread 类时,你需要重写 run() 方法

      P.S:您可以创建一个扩展 Thread 类并且不覆盖 run() 方法的类,java 不会抛出任何错误,但是当您启动 Thread 时,您将只是执行一个空实现(所以基本上什么都没有)

      【讨论】:

        【解决方案3】:

        当您出于某种目的创建线程时。为了达到这个目的,你必须编写代码。

        Thread 类的run() 中,实现什么也不做。您已经添加了自己的逻辑来实现您的目的。只需覆盖run(),将您的逻辑写入其中即可。

        现在,如果您对为什么 Java 没有将 run() 保留为抽象方法有疑问,请参阅帖子 Why is Thread not an abstract class and start() not final?

        【讨论】:

          【解决方案4】:

          当我们扩展一个类时,我们不会只覆盖抽象方法。当我们需要在子类中提供特定父类方法的更具体的实现时,我们会做覆盖。我们在扩展线程类时覆盖run 的原因是我们希望某些代码以多线程方式运行。因此,Java 的创建者已经商定了要覆盖的方法的名称。否则每个开发人员都会使用他/她自己的方法名称,编译器将不知道多线程代码在哪里。

          【讨论】:

            猜你喜欢
            • 2011-07-09
            • 1970-01-01
            • 1970-01-01
            • 2017-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-23
            • 2011-11-11
            相关资源
            最近更新 更多