Я пытаюсь создать архитектуру с использованием Java Spring, в которой будет несколько фоновых процессов, которые будут выполняться одновременно, прослушивая и извлекая информацию по мере ее поступления из разных сокетов ZMQ.
Я не уверен, как лучше это сделать. Прямо сейчас я использую аннотацию @Async с TaskPoolExecutor, но функция @Async, похоже, блокирует следующий вызов функции в стеке.
Итак, мои вопросы 1) Будет ли функция @Async блокировать следующий вызов функции в стеке? Или он запустит эту функцию в новом потоке и продолжит выполнение функций в текущем потоке. 2) Есть ли способ предоставить каждому потоку равный временной отрезок вычислительной мощности. 3) Есть ли лучшие способы сделать это?
Спасибо!
CompletableFuture
API для асинхронных вычислений. Я
недавно написал сообщение в блоге о проблемах с @Async
и о том, как
их можно решить с помощью CompletableFuture
: Демистификация магии
весны: @Async.@NathanHughes, перепроверил, исключений нет, отредактировал ответ. Спасибо :)
Хороший ответ, проголосовали за. Но не уверен, какие исключения охватываются вашим блогом. кажется нормальным сказать, что метод выполняется в отдельном потоке, а поток вызывающего абонента продолжает выполняться.