Spring @Controller调用@Async方法然后调用返回的Future ....代码气味的get()?

时间:2011-06-23 10:15:40

标签: java multithreading spring-mvc

我正在查看一个调用@Async方法的spring @Controller方法,执行一些“其他内容”,然后在异步方法调用返回的.get()上调用Future

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

我一直以为在网络应用程序中乱搞线程并不是一个好主意,毕竟网络应用程序在服务器上运行时有自己的线程思想(以及用于处理请求的固定线程池)。

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

1 个答案:

答案 0 :(得分:0)

这听起来不是最好的方法。启动异步任务以获取Future,然后在请求线程中调用Future.get意味着您已经占用了两个线程 - 一个正在执行异步任务的工作等待这项工作完成。

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