我有一个方法,它调用另一个方法,结果并不重要。确切地说,它是对Web服务的POST请求,结果在该方法中处理,而不是在调用方法中处理。现在我希望main方法在该任务完成之前返回。
从本质上讲,我需要某种异步性。我可以在Java中使用哪些工具?以下是步骤:
A
调用方法B
B
开始执行(我们对方法b的结果不感兴趣:它调用Web服务并自行处理结果)A
在方法B
完成答案 0 :(得分:1)
您可以使用CompletableFuture.runAsync()
调用方法B异步。
如果您希望在方法B退出时执行某些操作,则可以通过在返回的将来调用.thenRun()
来添加回调
答案 1 :(得分:1)
如果您使用的是Spring,那么它非常简单,没有任何样板代码。看一下Spring中的@Async支持。这是一个非常simple example,可以帮助您快速入门。
@Service
public class YourClass {
public void methodA() {
methodB();
}
@Async
public void methodB() {
// Your POST logic
}
}
要在xml配置中启用async
支持,您需要具有以下内容
<task:annotation-driven />
<task:executor id="defaultAsyncTaskExecutor" pool-size="5-15" queue-capacity="100" />
答案 2 :(得分:0)
new Thread(new Runnable() {
public void run() {
//Do whatever
}
}).start();
答案 3 :(得分:0)
尝试使用AsyncHttpClient,例如
`AsyncHttpClient asyncHttpClient = new AsyncHttpClient(
builder.setFollowRedirect(true).
setWebSocketTimeout(120000).
setAcceptAnyCertificate(true).
setMaxConnections(100).
setMaxRequestRetry(3).
setReadTimeout(120000).
setConnectTimeout(120000).
setRequestTimeout(120000).
build());
asyncHttpClient.prepareGet(url).execute(new AsyncCompletionHandler<Response>(){
@Override
public Response onCompleted(Response response) throws Exception{
//your logic here
}
@Override
public void onThrowable(Throwable t){
//your logic here
}
});
`