Java Spring@Controller调用@Async方法,然后在返回的将来调用get()。代码味道?

Java Spring@Controller调用@Async方法,然后在返回的将来调用get()。代码味道?,java,multithreading,spring-mvc,Java,Multithreading,Spring Mvc,我正在研究一个spring@Controller方法,它调用@Async方法,做一些“其他事情”,然后在异步方法调用返回的未来上调用.get() 我可以看到这可以如何提高控制器的响应时间,因为异步方法和“其他东西”都涉及调用web服务,当然,为什么不并行执行多个ws调用呢。但是,在控制器内这样做,对我来说似乎很不寻常 我一直认为,在web应用程序中乱搞线程不是一个好主意,因为所有web应用程序都是在服务器上运行的,它们对线程有自己的想法(以及处理请求的固定线程池) 这东西有臭味吗?我什么都不担心

我正在研究一个spring@Controller方法,它调用@Async方法,做一些“其他事情”,然后在异步方法调用返回的
未来
上调用
.get()

我可以看到这可以如何提高控制器的响应时间,因为异步方法和“其他东西”都涉及调用web服务,当然,为什么不并行执行多个ws调用呢。但是,在控制器内这样做,对我来说似乎很不寻常

我一直认为,在web应用程序中乱搞线程不是一个好主意,因为所有web应用程序都是在服务器上运行的,它们对线程有自己的想法(以及处理请求的固定线程池)


这东西有臭味吗?我什么都不担心吗?spring将如何通过在服务器控件之外创建新线程或使用服务器池中的另一个线程来处理并发线程?

这听起来不是最好的方法。启动一个异步任务以获取一个
未来
,然后在请求线程中简单地调用
未来。获取
,意味着您有两个线程被占用-一个线程为异步任务做工作,另一个线程等待该工作完成


如果在异步任务启动和调用
get
之间的请求线程上发生了一些事情,那么我可以理解这一点。否则,最好只进行同步调用。

如果请求线程在异步任务启动和get调用之间发生了什么事情,那么我可以理解这一点。
-正如我在问题中提到的,请求线程会进行一些ws调用。抱歉,我没有理解这一点。你可以很高兴地同时打这些电话。web应用程序线程没有什么特别之处,为IO绑定的工作启动新任务是非常明智的。