Используйте аннотацию @async для реализации асинхронных вызовов.

Spring Boot

Что такое асинхронный вызов?

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

Однако компьютеры могут выполняться одновременно, а использование синхронных вызовов занимает слишком много времени, поэтому мы хотим открыть три округа для одновременной обработки этих трех задач, что требует использования аннотации @Async.

Как использовать @Async

Использовать аннотации @Async в весеннем загрузочном проекте очень удобно.

Просто нужно добавить в класс запуска проекта@EnableAsyncаннотацию, а затем добавьте ее в метод, который вы хотите вызвать асинхронно.@AsyncВот и все.

Пример использования

Сначала давайте посмотрим на результат синхронного вызова.

Добавьте следующие три метода в наш тестовый класс.

Затем назовите это.

Результат выполнения показан на следующем рисунке:

Как видите, три задачи выполняются последовательно и вызываются с использованием одного и того же потока.

Общее время равно сумме затрат времени на выполнение трех задач.

Как насчет асинхронных вызовов? Сначала добавьте класс TestService, добавьте три вышеуказанных метода в этот класс и отметьте каждый@Asyncаннотация. Как показано ниже:

назови это.

Полученный результат выглядит следующим образом:

Можно четко видеть, что первое, что нужно распечатать, - это выполнить все задачи, потому что только основной нить отвечает только за запуск этих трех задач, а затем оператор печати выводится без ожидания выполнения задачи.

В то же время хорошо видно, что три задачи начинаются и заканчиваются случайным образом и выполняются в разных потоках.

@AsyncИспользование аннотаций очень простое, но очень практичное.В процессе кодирования много вызовов, которые не нужно ждать результата (конечно, мы можем получить результат и через Future).На данный момент это аннотацию можно использовать для повышения скорости возврата общего результата.

Меры предосторожности

Я использую его в первый раз@AsyncКогда я ступил на яму, я только заметил, что большие ребята использовали эту аннотацию, но не читали ее подробно.асинхронный методОн написан в том же классе, что и метод, который его называет, поэтому асинхронная аннотация не имеет никакого эффекта. Вот почему.

Картинка перенесена по реферальной ссылке:

Когда мы отметили метод b класса A с помощью@AsyncПримечания (картинка@Transactinal, тот же принцип), после того как Spring просканирует аннотацию, он создаст прокси-класс proxy$A для класса A и добавит соответствующую операцию в начало аннотированного метода, как показано на рисунке.startTransaction(),использовать@AsyncКогда это работа запуска нового потока (не смотрите исходный код специально).

В это время, если метод A вызывается экземпляром класса C, цифра 1 перескакивает на маркер 1, затем вызывается исходный метод B без запуска нового потока.

Однако при прямом вызове метода b класса A через экземпляр класса B на отметке 2 операция запуска нового потока автоматически добавляется spring, поэтому можно реализовать асинхронный вызов.

постскриптум

Параллельное программирование — это препятствие, которое программисты не могут обойти, иначе каждый день время вашего сервиса истекает, и средства мониторинга не смогут его отследить.@AsyncЭто очень простое знание параллелизма, даже не знание.Простое обращение к знанию может значительно повысить скорость работы нашей программы.

Ссылка на ссылку

blog.CSDN.net/QQ_34581118…


Заканчивать.



ChangeLog

2018-10-29 Завершено

Все вышеизложенное является личными мыслями, если есть какие-либо ошибки, пожалуйста, исправьте их в комментариях.

Добро пожаловать на перепечатку, пожалуйста, подпишите и сохраните исходную ссылку.

Контактный адрес электронной почты: huyanshi2580@gmail.com

Дополнительные заметки об обучении см. в личном блоге ------>Хуян тен