以下是伪代码片段。
下面的代码是否不符合并行异步处理的概念?
我之所以这样问,是因为在下面的代码中,主线程会提交一个任务以在不同的线程中执行。在将任务提交到队列后,它会阻塞在Future.get()方法上等待任务返回值。我宁愿在主线程中执行任务,而不是提交到另一个线程并等待结果。通过在新线程中执行任务,我获得了什么?
我知道你可以等待有限的时间等等,但如果我真的关心结果怎么办?如果有多个任务需要执行,问题会变得更糟。在我看来,我们只是同步地完成工作。我知道Guava库提供了非阻塞的监听器接口。但我想知道Future.get() API是否正确理解。如果是正确的,为什么Future.get()被设计成阻塞,从而破坏了整个并行处理的过程?
我使用Java 6。
我之所以这样问,是因为在下面的代码中,主线程会提交一个任务以在不同的线程中执行。在将任务提交到队列后,它会阻塞在Future.get()方法上等待任务返回值。我宁愿在主线程中执行任务,而不是提交到另一个线程并等待结果。通过在新线程中执行任务,我获得了什么?
我知道你可以等待有限的时间等等,但如果我真的关心结果怎么办?如果有多个任务需要执行,问题会变得更糟。在我看来,我们只是同步地完成工作。我知道Guava库提供了非阻塞的监听器接口。但我想知道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());
}