2014-03-26 44 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();