Комментарии 4
Создавать пулы потоков во время работы приложения не есть хорошо. И совсем нехорошо - создавать их, используя в настройках входные данные. Пул должен создаваться во время старта и выключаться вместе с приложением.
вызываем
executorService.shutdown()
для корректного завершения пула потоков
Корректное завершение пула потоков приведено, ВНЕЗАПНО!, в документации к основному интерфейсу.
А почему Future, а не CompletableFuture?
И ещё вопрос, если пользователь добавит 100500 фото
Executors.newFixedThreadPool(photos.size())
1) Использование CompletableFuture тоже имеет место быть. Он является более мощным и гибким инструментом и подойдет для работы со сложными асинхронными операциями, где нужно внести дополнительную логику обработки результатов и управления потоками. Однако в моем случае простая асинхронная задача загрузки фотографий, и его использование кажется избыточным. На мой взгляд, Future достаточно для этих нужд, и он проще в использовании.
2) У подобных решений на практике устанавливается ограничение на максимальное количество фотографий, которые пользователь может прикрепить. Как правило это до 10. Поэтому я подразумеваю, что в первую очередь стоит ограничение на фронте, ну и на бэке тоже стоит учесть это ограничение, чего я не сделал, так как проект тестовый.
при этом мы понимаем, что будет в дальнейшем ограничение на количество возможных фотографий к прикреплению
Поэтому создать количество потоков по количеству фотографий Executors.newFixedThreadPool(photos.size())
будет уместно.
Добавление отзывов с фотографиями в S3 с помощью AWS SDK Java