Cuando leo Head First Servlet and JSP
, dicen que la variable de instancia no es segura para subprocesos.Por qué la variable de instancia en Servlet no es segura para subprocesos
No entiendo tanto esta afirmación. Por ejemplo: tengo un servlet cuyo nombre es ActionServlet.java
. Cada vez, la solicitud de cada usuario se envía al servidor, el contenedor creará un nuevo hilo y creará una nueva instancia de ActionServlet
.
ActionServlet
puede ser tiene una estructura:
public class ActionServlet extends HttpServlet {
// example of instance variable
Instance variable;
public void processRequest(HttpServletRequest request, HttpServletResponse response) {
// process something relating to instance variable
}
}
Por lo tanto, debido a que todos estos hilos de crear una nueva instancia de la clase de ActionServlet
, por lo que no ven ningún problema aquí. porque las instancias de estos hilos están separadas la una de la otra.
Determine dónde se produce un problema cuando se usa la variable de instancia en el entorno de multiproceso.
Gracias :)
Considere llamar al mismo método en el mismo objeto desde dos subprocesos. –
@DanielFischer No me puedo imaginar cómo diferentes hilos pueden usar el mismo objeto porque: 1) estas variables son privadas 2) El objeto de este hilo siempre es diferente de otro hilo (creo). Tengo un código de muestra arriba. Por favor dime más claro. – hqt
@hqt: el contenedor crea una instancia única del servlet, la almacena en alguna estructura de datos global (un mapa, por ejemplo) y cada vez que recibe una solicitud, obtiene el servlet apropiado (según la ruta de la solicitud) del mapa, y llama a su método de servicio. El hecho de que los campos del servlet sean privados no tiene ninguna influencia. El contenedor ni siquiera se preocupa por ellos. –