【发布时间】:2012-09-03 22:51:34
【问题描述】:
我对 RunnableFuture 接口定义的“正确性”有疑问。这可能是关于在 java 中定义接口 cmets 的正确争用问题。
RunnableFuture的run()方法的定义:
将此 Future 设置为其计算结果 ...
但是,这显然不可能总是正确的,因为 run() 的返回类型是void,而 RunnableFuture 只是一个接口,看来如果我们要保证这一点,我们就必须知道一些关于实现类的性质(例如 get() 实现)。
现在,如果 RunnableFuture 实际上返回了一个值,该值被隐藏并始终由阻塞的 get() 函数返回,这样的定义(由于其实现,必须出现在类中,而不是接口中限制),显然是合适的。
因此,我想知道:此接口的 run() 方法是否正确定义?
作为反例:Runnable run() 接口定义总是正确的。
当一个对象实现接口 Runnable 用于创建一个 线程,启动线程会导致对象的运行方法 在那个单独执行的线程中调用。
因此,即使 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
【问题讨论】:
标签: java interface runnable future