Spring @Controller, который вызывает метод @Async, затем вызывает get () для возвращенного Future .... запах кода? - PullRequest
1 голос
/ 23 июня 2011

Я смотрю на пружинный метод @Controller, который вызывает метод @Async, выполняет некоторые «другие действия», а затем вызывает .get() для Future, возвращаемого вызовом метода async.

Я вижу, как это может улучшить время отклика контроллера, поскольку как асинхронный метод, так и «другие вещи» включают вызовы веб-служб и, конечно же, почему бы не выполнить несколько вызовов ws параллельно.Но делать это внутри контроллера кажется мне необычным.

Я всегда думал, что возиться с потоками в веб-приложении - не очень хорошая идея, после того, как все веб-приложения запущенына серверах с их собственными идеями о многопоточности (и фиксированным пулом потоков для обработки запросов).

Имеет ли это неприятный запах по этому поводу?Я ни о чем не беспокоюсь?Как Spring будет обрабатывать параллельные потоки, создавая новый поток вне элемента управления сервера или используя другой поток из пула сервера?

1 Ответ

0 голосов
/ 23 июня 2011

Это не похоже на лучший подход. Запуск асинхронной задачи для получения Future, затем простой вызов Future.get в запрашивающем потоке означает, что у вас занято два потока - один выполняет работу для асинхронной задачи, а другой ожидает этого работа для завершения.

Если что-то случится в запрашивающем потоке между запуском асинхронной задачи и вызовом get, тогда я могу это понять. В противном случае лучше просто сделать синхронный вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...