我对 RunnableFuture 接口定义的“正确性”有疑问。这可能是关于在 java 中定义接口注释的正确争用的问题。
RunnableFuture 的 run() 方法的定义:
将此 Future 设置为其计算结果...
然而,这显然不可能总是正确的,因为 run() 的返回类型是void
,而 RunnableFuture 只是一个接口,看来如果我们要保证这一点,我们必须了解实现类的性质( get() 实现,例如)。
现在,如果 RunnableFuture 实际上返回了一个值,该值是隐藏的,并且总是由阻塞的 get() 函数返回,这样的定义(由于其实现限制,它必须出现在类中,而不是接口中),显然是合适的。
因此,我想知道:此接口的 run() 方法是否正确定义?
作为一个反例:Runnable run() 接口定义总是正确的。
当使用实现接口 Runnable 的对象创建线程时,启动线程会导致在该单独执行的线程中调用对象的 run 方法。
因此,即使 Runnable 没有定义实现——该接口告诉我们 JVM 如何通过 Runnable 接口实现线程,而无需对实现类强加非保证契约。
所以我有3个问题:
RunnableFuture 的文档在几种情况下是否可能不正确?
如果 (1) 是这种情况,是否可以通过 java 约定接受?
RunnableFuture run() 和 Runnable run() 之间的“真正”区别是什么?
请参阅http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html