Sí, que va a trabajar. En una aplicación web en la que trabajé, necesitaba enviar un correo electrónico de notificación dependiendo de la acción del usuario. Agregué un interceptor post-commit en el servicio, y eliminé ese mensaje del correo electrónico en un hilo separado. (En mi caso, resultó ser más limpio que poner el código en el controlador, porque solo quería que ocurriera si se comprometía la transacción).
Necesita asegurarse de que el hilo realmente deja de funcionar en algún momento, ya sea configurando daemon en verdadero (si está bien que detener el servidor mata el hilo sin previo aviso) o asegurándose de que el código en su método de ejecución siempre terminará en algún momento.
Le conviene más usar un subproceso que crear subprocesos nuevos, por lo que no se arriesga a agotarse los recursos (los subprocesos no suelen ser eventos independientes, si un subproceso se cuelga el siguiente probablemente también lo hará) para reducir sus pérdidas). Los métodos anotados con @Async se ejecutarán utilizando un ejecutor que puede configurar como se muestra en the Spring documentation.
Quizás sea bueno mencionar que el Controlador no puede notificar al usuario cuando falla el envío de un correo electrónico (a menos que use Callable.get(), que de alguna manera derrota el propósito de otro hilo). – extraneon
Si quiero usar un grupo de subprocesos, ¿cómo puedo lograr que solo haya un subproceso de subprocesos utilizado para todos los usuarios/solicitudes en el servidor? Editar: ¿Esto se puede hacer mediante el alcance del bean de subprocesos a "singleton"? – Erik