Spring async и таймшеры

Я пытаюсь создать архитектуру с использованием Java Spring, в которой будет несколько фоновых процессов, которые будут выполняться одновременно, прослушивая и извлекая информацию по мере ее поступления из разных сокетов ZMQ.

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

Итак, мои вопросы 1) Будет ли функция @Async блокировать следующий вызов функции в стеке? Или он запустит эту функцию в новом потоке и продолжит выполнение функций в текущем потоке. 2) Есть ли способ предоставить каждому потоку равный временной отрезок вычислительной мощности. 3) Есть ли лучшие способы сделать это?

Спасибо!

0
0
29
1

Ответы 1

  1. @Async будет запускать аннотированный метод асинхронно, используя указанный исполнитель.
  2. Нет возможности контролировать ресурсы ОС посвящен темам.
  3. Java имеет очень удобный CompletableFuture API для асинхронных вычислений. Я недавно написал сообщение в блоге о проблемах с @Async и о том, как их можно решить с помощью CompletableFuture: Демистификация магии весны: @Async.

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

Nathan Hughes 31.10.2018 15:18

@NathanHughes, перепроверил, исключений нет, отредактировал ответ. Спасибо :)

Ilya Zinkovich 31.10.2018 15:20

Другие вопросы по теме