2014-03-26 45 views

回答

1

这是一个很大的话题,有很多陷阱。但是,您可以通过将您的方法包装在Callable<T>中并将其提交至ExecutorService.submit以获得良好的开局。这将返回一个Future<T>,它有一个方法get()。最后一种方法返回T,但直到Callable<T>完成。

例如,假设foo.b()返回String。你会做这样的事情:

Callable<String> asyncB = new Callable<String>() { 
    @Override 
    public String call() { 
     foo.b(); 
    } 
}; 
Future<String> futureB = myExecutorService.submit(asyncB); 
// asyncB will now execute on a separate thread, 
// which is managed by the ExecutorService 
foo.a(); // synchronous call 
String resultB = futureB.get(); 

如果你在的Java 8中,第一位可以只是:

Callable<String> asyncB =() -> foo.b();