Как сказал Дэвид, используйте асинхронный API. Я не рекомендую создавать новую тему. Создание потока для каждого запроса может потенциально означать, что создается много потоков для обслуживания параллельных запросов. Лучше использовать исполнителя пула потоков с ограниченным размером пула и ставить в очередь задания, которые выполняют отправку почты. Google Java исполнители и как использовать их в течение весны; Существуют различные реализации. Это означает, что ваши запросы не блокируются, и они будут выполняться так же быстро, как если бы вы вообще не отправляли почту (в значительной степени).
В качестве альтернативы используйте локальный почтовый сервер - отправка через почтовый сервер, работающий на локальном хосте, выполняется намного быстрее, но я бы рекомендовал асинхронный подход. Однако при переходе по асинхронному маршруту необходимо учитывать некоторые особенности, например, как обрабатывать ошибки отправки почты. Крайне важно, чтобы ваш поток выполнения отличался в состоянии ошибки или вы можете спокойно его игнорировать?