如何异步调用java方法?

时间:2014-03-26 05:48:29

标签: java asynchronous methods invocation

是否有任何好的示例可以开始使用java同步方法调用。我有两个方法a和b,必须异步调用b。有什么建议吗?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

如果您有任何机会使用Spring,他们都有出色的异步支持。

http://docs.spring.io/spring/docs/3.0.x/reference/scheduling.html