Ayuda: Con correos

Que tal espero puedan apoyarme. El tema es que tengo una clase que envia correos y se me estan encolando y saturan el servicio y se hace lenta la aplicación, he visto algunas implementaciones donde utilizan hilos, pero mi duda es si solucionando de esta forma de alguna manera tendria que llegar a matar el hilo, puesto que pienso que si se crea al enviar un correo el hilo seguiria viviendo. que piensan al respecto?? o conocen alguna otra solución?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

No se mueren solos después

No se mueren solos después de terminar el método "run"

 

Imagen de ezamudio

así es

El hilo termina al terminar el método run, ya sea de manera normal (un return) o anormal (se arroja una excepción que nadie manejó).

Habría que entrar en más detalles porque está muy como de usuario la info: se encolan, se satura, se hace lenta la app.

Es una app web? o es de escritorio? Su función primordial es el envío de correos o es algo incidental?

Se pueden hacer varíos envíos de correo simultáneos? (casi siempre la respuesta es NO, porque se usa una sola cuenta que no permite múltiples logins) Entonces hay que encolar...

Se hace lenta la app, o poco responsiva? Tal vez el problema es que se hace el envío del correo en el mismo hilo que atiende al usuario (el EDT de Swing por ejemplo, o desde el servlet o lo que sea en web). El envío de correo tarda un poco porque se establece una conexión, hay un saludo, se envían datos, se obtiene un acuse de recibo y se cierra la conexión. Si se usa TLS o SSL, entonces además se estableció una conexión segura y se cifran los datos antes de enviarse y hay que descifrar lo que se recibe, etc. Si para evitar envíos simultáneos se puso un   por ahí, pues entonces cuando 10 usuarios causan un envio de correo, uno lo ve muy rápido y otros lo sentirán lento porque están esperando (un desafortunado será el último en enviar su correo y dirá que la app está lentísima).

Si esto último es el caso, entonces pasar el envío de correo a otro hilo es la solución. El tiempo de procesamiento y el uso de CPU seguirán igual, pero el usuario recibe una respuesta inmediata (pero en vez de "ya se envió su correo" tiene que ser "su correo será enviado en algún momento, esperemos que pronto"). Si necesitan saber el momento del envío, pues habrá que decirle "espere un momento, estamos esperando la notificación de que ya fue enviado el correo".

Y para todo eso, pues se puede usar un ThreadPool de un solo hilo. En este caso el threadpool tendrá un hilo que está siempre vivo, hasta que le hagan shutdown.