对 Future.get() 块的方法调用。这真的可取吗?
在将其标记为重复之前,请仔细阅读问题。
下面是伪代码的片段。我的问题是 - 下面的代码是否不能破坏并行异步处理的概念?
我问这个问题的原因是,在下面的代码中,主线程将提交一个要在不同线程中执行的任务。在队列中提交任务后,它会在 Future.get() 方法上阻止任务返回值。我宁愿在主线程中执行任务,而不是提交到其他线程并等待结果。通过在新线程中执行任务,我获得了什么?
我知道你可以等待有限的时间等,但是如果我真的关心结果呢?如果要执行多个任务,则问题会变得更糟。在我看来,我们只是在同步地做这项工作。我知道番石榴库提供了一个非阻塞的监听器接口。但我很想知道我的理解对于Future.get()API是否正确。如果它是正确的,为什么Future.get()被设计成阻止从而击败并行处理的整个过程?
注意 - 为了记录,我使用JAVA 6
public static void main(String[] args){
private ExectorService executorService = ...
Future future = executorService.submit(new Callable(){
public Object call() throws Exception {
System.out.println("Asynchronous Callable");
return "Callable Result";
}
});
System.out.println("future.get() = " + future.get());
}