为啥 java.util.concurrent.RunnableFuture 有一个 run() 方法?

Posted

技术标签:

【中文标题】为啥 java.util.concurrent.RunnableFuture 有一个 run() 方法?【英文标题】:Why does java.util.concurrent.RunnableFuture have a run() method?为什么 java.util.concurrent.RunnableFuture 有一个 run() 方法? 【发布时间】:2014-09-25 09:33:42 【问题描述】:

在浏览 JDK 7 时,我发现 java.util.concurrent.RunnableFuture<V> 有一个 run 方法。我想知道在接口中复制相同的运行方法签名有什么意义,因为它已经扩展了Runnable

package java.util.concurrent;

public interface RunnableFuture<V> extends Runnable, Future<V> 
    /**
     * Sets this Future to the result of its computation
     * unless it has been cancelled.
     */
    void run();
  

【问题讨论】:

【参考方案1】:

它在接口中定义,以便他们可以将RunnableFuture-specific JavaDoc 附加到它。没有技术意义。

【讨论】:

谢谢!这是更有意义的答案。【参考方案2】:

没有提供此类解释的文档。所以我将提供我的意见。

我认为它没有任何重大意义。想象一下界面世界的样子

public interface RunnableFuture<V> extends Runnable, Future<V> 

虽然它是完全有效的,但它并没有清楚地表明它的目的。所以在我看来,它只是为了便于理解run() 特定于RunnableFuture 接口的方法而提供的。这样您就知道通过覆盖 run() 方法来放置您的可运行逻辑。

我能想到的另一点是Runnable 是早期接口之一,如果您看到 run() 方法,它就是

public abstract void run();

publicabstract 关键字是多余的,因为接口中的方法默认为publicabstract。即兴发挥这可能是原因之一。

【讨论】:

好吧,如果我们考虑外观和冗余,那么我同意你的看法...... ;) 我的答案也包含了已经被接受的答案。 provided for easy understanding for run() method specific to RunnableFuture interface。无论如何很高兴知道你同意 ;)

以上是关于为啥 java.util.concurrent.RunnableFuture 有一个 run() 方法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?