因为 ExecutorService
的未来
接口是为从另一个线程获取返回数据而创建的,而不仅仅是为了运行它。前途
编辑:认为您需要在20分钟后关闭一个线程。当您有一个返回值<code>void</code>时,您会怎么做?
Future<Void> future = execService.submit(operation);
execService.shutdown();
opResult = future.get(20, TimeUnit.MINUTES);
此代码必须给出错误,因为
将来
没有回报。但是,如果它返回 null,execService
控制器对象将知道关闭
已发生。或者,如果它在20分钟内没有返回任何内容,则可以使用execService.shutdownNow()。
请注意,Runnable
的 run
方法返回 void
基元,而不是 Void
类型。因此,Future
不能有Void
类型,解决方案是使其成为通配符。请注意,Future
来自 java 1.5,而 Runnable
来自 1.0。由于遗留代码的原因,他们不会更改run
的返回类型以符合未来
。
Jdk 1.8在提交方法实现中使用void,而在jdk1.6中它是Object。我的理解是,使用void更合适,这就是为什么它在jdk1.7/1.8中被改变了。只是为了支持接口而不改变它
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
在JDK是1.6
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Object> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
我正在尝试以下方法,并认为我会失败 但是我却得到了 有人能回答为什么吗?
此答案指示如何将转换为,同时管理将发生阻塞的位置: 我的问题和评论中的问题一样: 怎么了?为什么你使用一个额外的线程与Promise结合? 答复如下: 它会在你拉线的时候卡住线。如果您已经为这样的未来配置了ExecutionContext,这很好,但是默认的ExecutionContext包含的线程与您拥有的处理器一样多。 我不确定我是否理解这个解释。重申: 有什么问题?在未来内部阻塞不是和手动创
问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么
问题内容: 为什么不: 代替: 获得唯一哈希码的更高机会? 问题答案: 因为数组的最大长度为。 由于的主要用途是确定将对象插入/ 的后备数组中的哪个插槽,因此hashcode> 将无法存储在该数组中。
问题内容: 有人可以解释为什么我想要的结果“ hi”以字母“ b”开头并以换行符开头吗? 我正在使用 Python 3.3 如果我使用python 2.7运行此额外的“ b”,则不会出现 问题答案: 默认情况下,echo命令返回换行符 与此比较: 至于字符串前面的 b ,则表明它是一个字节序列,等效于Python 2.6+中的常规字符串 http://docs.python.org/3/refer
我已经能够验证是否会产生排序的。但是,它不会返回列表。为什么?