Предисловие
Я написал несколько статей о реализации асинхронных вызовов с использованием @Async, и я также получил отзывы от многих детских обуви. Среди них большинство проблем связаны с использованием будущего и контроля тайм -аута асинхронного исполнения. Поэтому я расскажу об обращении с этими двумя проблемами вместе.
Если вы не знаете использование аннотаций @Async, вы можете проверить предыдущую статью следующим образом:
Определите асинхронные задачи
Во -первых, мы сначала используем аннотацию @Async для определения асинхронной задачи. Этот метод возвращает будущий тип следующим образом:
@Slf4j@componentpublic class task {public static random random = new random (); @Async ("taskexecutor") public future <string> run () бросает исключение {long sleep = random.nextint (10000); log.info («Начните задачу, время для взять:« + sleep + "msils"); Thread.Sleep (Sleep); log.info («завершить задачу»); вернуть новый Asyncresult <> ("test"); }}Советы: какой тип будущего?
Будущее - это интерфейс, который отменяет результаты выполнения конкретных выполняемых или вызывших задач, проверяет, выполняется ли запрос, и получает результаты. При необходимости вы можете получить результат выполнения с помощью метода GET, который блокирует, пока задача не вернет результат.
Его определение интерфейса следующее:
Public Interface Future <v> {Boolean Cancel (Boolean MayIntertifrunning); логический iscancelled (); логический isdone (); V get () бросает прерванную экспрессию, executionException; V Get (Long Timeout, TimeUnit Unit) Throws TreamptedException, executionException, TimeOutException;}Он объявляет пять подобных методов:
Другими словами, будущее обеспечивает три функции:
ТЕСТРЫЕ ИЗВЕДЕНИЕ И ОБРАЩЕНИЕ
После завершения определения асинхронной задачи, которое возвращает будущее, мы пытаемся реализовать модульный тест для использования этого будущего для выполнения выполнения задачи, например:
@Slf4j@runwith (springjunit4classrunner.class) @springboottestpublic class applicationtests {@autowired частная задача; @Test public void test () throws exception {future <string> futureresult = task.run (); String result = futurerSult.get (5, timeUnit.seconds); log.info (результат); }}В приведенном выше коде мы также определяем время ожидания для выполнения потока в методе GET. Выполнив этот тест, мы можем заметить, что, когда время выполнения превышает 5 секунд, здесь будет брошено исключение тайм -аута. Поток выполнения может быть выпущен обратно в пул потоков из -за тайм -аута выполнения, чтобы не блокировать и занимать ресурсы.
Полный пример:
Читатели могут выбрать следующие два репозиторию для просмотра проектов главы4-1-4 в соответствии с их предпочтениями:
Github: https://github.com/dyc87112/springboot-learning/
Gitee: https://gitee.com/diidispace/springboot-learning/
Локальная загрузка: http://xiazai.vevb.com/201805/yuanma/springboot-learning(vevb.com).rar
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.