2009-12-25 9 views
6

Por muchas razones, no es una buena práctica usar subprocesos dentro de un servlet.¿Es seguro usar java.util.Timer dentro de un servlet?

java.util.Timer parece envoltura alrededor de un hilo. Entonces, ¿tampoco es seguro usarlo? En caso afirmativo, ¿cuál es la forma más segura de programar una tarea en un servlet?

+1

Para obtener las mejores respuestas, explique para qué lo necesita exactamente. – BalusC

+0

Realmente no creo que importe, ¿o sí? –

+1

Sin duda puede usarlo de forma segura, pero la forma más segura (mejor) depende del requisito funcional real. Los que hacen esta pregunta en particular a menudo no están completamente al tanto del ciclo de vida del servlet, lo que puede ocasionar problemas cuando juegas con hilos. Esa es la causa raíz del problema de que "no es una buena práctica" (que en realidad no es verdad :)). – BalusC

Respuesta

9

Sí, puede usar temporizadores.

Una Lo importante a recordar es que cancelar temporizador cuando se para el servlet. Si olvida cancelar el temporizador, su aplicación web sufrirá fugas de memoria (fugas del cargador de clases, ya que el subproceso del temporizador está vinculado al WebappClassLoader mediante su ContextClassLoader) y no se puede implementar varias veces.

+0

¿hay otra envoltura segura? – mebada

+0

gracias por su esfuerzo – mebada

+0

definir "seguro" por favor. ¿Quiere decir "acceso seguro" o "sin errores" o "fácil de usar" o ...? – mhaller

2

Sí. Es perfectamente seguro. El contenedor servlet se encargará de los hilos para las solicitudes HTTP, pero usted puede engendrar hilos adicionales usted mismo, ya sea que su duración esté restringida a la de la solicitud, o por más tiempo.

p. Ej. un patrón común es generar un hilo de procesamiento de larga ejecución. Las solicitudes de servlet colocarían elementos de trabajo en una cola (para el procesamiento fuera de banda) y el hilo de procesamiento de larga duración manejaría estos elementos de trabajo.

Here's an article from OReilly que detalla el uso del temporizador en servlets y EJB.

+0

incluso lo uso en doPost oe doGet methods? – mebada

+0

Sí. Eso está bien –

+0

hay una referencia o punto de referencia para probar eso? – mebada

Cuestiones relacionadas