Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CompletionService.take().isDone()是否始终为真?_Java_Concurrency_Future - Fatal编程技术网

Java CompletionService.take().isDone()是否始终为真?

Java CompletionService.take().isDone()是否始终为真?,java,concurrency,future,Java,Concurrency,Future,可以这样假设吗 java.util.concurrent.CompletionService.take().isDone() 总是会返回真的吗?如果是这样,为什么take()返回的是未来,而不是直接返回值?如果不是,文档中使用的“已完成的任务”是什么意思?这就是javadoc的意思,take()阻塞直到它可以返回一个已完成的未来,当它返回时当然会执行。这就是javadoc的意思,take()阻塞,直到它可以返回一个已完成的未来,当它返回时,当然会这样做。因为你可以将未来用于其他事情。提交()

可以这样假设吗

java.util.concurrent.CompletionService.take().isDone() 

总是会返回真的吗?如果是这样,为什么take()返回的是未来,而不是直接返回值?如果不是,文档中使用的“已完成的任务”是什么意思?

这就是javadoc的意思,
take()
阻塞直到它可以返回一个已完成的未来,当它返回时当然会执行。

这就是javadoc的意思,
take()
阻塞,直到它可以返回一个已完成的未来,当它返回时,当然会这样做。

因为你可以将未来用于其他事情。提交()时,您将获得未来。因此,您可以首先使用返回的Future对象来监视状态或提前取消。其次,如果您更改futureFactory()(我认为它的名称有所不同,但我安装了Java5而不是Java6),您可以向future对象添加各种额外的成员


因此,在执行take()时,您是对的,在这种情况下,未来的一部分(状态的跟踪/取消)不是很有用。但是OTOH,为什么不按原样返回整个未来,包括扩展功能?

因为你可以将未来用于其他事情。提交()时,您将获得未来。因此,您可以首先使用返回的Future对象来监视状态或提前取消。其次,如果您更改futureFactory()(我认为它的名称有所不同,但我安装了Java5而不是Java6),您可以向future对象添加各种额外的成员


因此,在执行take()时,您是对的,在这种情况下,未来的一部分(状态的跟踪/取消)不是很有用。但是OTOH,为什么不按原样返回整个未来,包括扩展功能?

我同意这就是它的含义,但这就留下了一个问题,即为什么要返回未来而不是直接返回值。不过,我应该在提问之前先测试一下这个问题,因为当我点击submit时,我突然意识到成功并不是导致Future.isDone()返回true的唯一条件;当未来被取消时,它也会这样做。能够将take()返回的未来与submit()返回的相应未来进行匹配也是有价值的。我同意这就是它的含义,但这就留下了一个问题:为什么要返回未来而不是直接返回值。不过,我应该在提问之前先测试一下这个问题,因为当我点击submit时,我突然意识到成功并不是导致Future.isDone()返回true的唯一条件;当未来被取消时,它也会这样做。能够将take()返回的未来与submit()返回的相应未来相匹配也是有价值的。此外,设计对称性也是一个简单的答案。如果您通过完成服务获取()是正确的,但未来并没有像任务的原始表示那样有用,它被用于提交到Executor类型服务的所有其他方面,其中一些方面的使用非常关键。此外,设计对称性也是一个简单的答案。如果您是通过completion service获取()是正确的,但Future并不是任务的原始表示形式,它用于提交给Executor类型服务的所有其他方面,其中一些方面的使用至关重要。