2012-09-20 14 views
16

¿Cada solicitud HTTP accede al mismo objeto de servlet pero en un hilo diferente? ¿o crea un nuevo hilo y una nueva instancia de servlet?¿Cada solicitud accede al mismo objeto de servlet?

+0

¿Por qué no crear instancias de un servlet a petición? –

+0

posible duplicado de [¿Cómo funcionan los servlets? Instanciación, variables de sesión y multihebra] (http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading) – BalusC

Respuesta

12

El contenedor utilizará la misma instancia de servlet si su servlet no implementa SingleThreadModel. De lo contrario, no hay garantía de que se golpee el mismo objeto Servlet. El contenedor es libre de crear más instancias de servlet si lo considera necesario. Pero las solicitudes vienen en diferentes hilos, no necesariamente de nueva creación (como Sanjay mencionó).

partir de la especificación Servlet 3.0:

Para un servlet no alojada en un entorno distribuido (el valor predeterminado), el contenedor de servlets debe usar sólo una instancia por declaración de servlet. Sin embargo, para un servlet que implementa la interfaz SingleThreadModel, el contenedor de servlets puede instanciar instancias múltiples para manejar una pesada carga de solicitud y serializar las solicitudes a una instancia particular.

...

general, el contenedor Web gestiona las peticiones simultáneas al mismo servlet por ejecución concurrente del método de servicio en diferentes hilos.

7

Cada solicitud HTTP crea un nuevo hilo pero accede a la misma instancia del servlet.

EDITAR: En el caso de un nodo de servidor, tendrá la misma instancia de Servlet en ese nodo. En caso de balanceo de carga/muchos servidores, generalmente tendrá una instancia por Java VM.

+6

Estoy bastante seguro de que realmente no * crea * un nuevo hilo siempre; más parecido recoge un hilo libre de un grupo de subprocesos existente. –

+1

@ SanjayT.Sharma Tiene razón, a menudo se hace de esta manera (por razones de rendimiento), pero este es el detalle de implementación del servidor de aplicaciones/contenedor de servlets y su código no debe depender de eso –

Cuestiones relacionadas