Antes de hablar sobre la seguridad del hilo de Struts2, permítanme hablar primero sobre ¿Qué es la seguridad del hilo? Esto es lo que dijo un interno.
Si su código está en el proceso en el que se encuentra, hay varios hilos que se ejecutan al mismo tiempo, y estos hilos pueden ejecutar este código al mismo tiempo. Si el resultado de cada ejecución es el mismo que el resultado de una ejecución de un solo hilo, y los valores de otras variables son los mismos que se esperan, es seguro de subproceso.
Es decir, en un proceso, múltiples hilos se ejecutan simultáneamente. Durante la ejecución de cada hilo, los valores variables son los mismos y los resultados de la ejecución son los mismos, que es seguro de subproceso. De lo contrario, el hilo no es seguro.
Luego revise los problemas de seguridad del hilo de los servlets. Dado que los servlets son el modo Singleton, solo se generará una instancia. Cuando múltiples usuarios solicitan un servlet al mismo tiempo, TomCat obtendrá varios subprocesos para ejecutar el código de servlet. Por lo tanto, los servlets son seguros. Si se usa de manera incorrecta, pueden ocurrir problemas. Aquí hay un ejemplo:
paquete com.wang.servlet; import java.io.ioException; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet; import La clase ThreadSafeServlet extiende httpservlet {name de cadena privada; // Definir un nombre de variable privada pública public void doget (httpservletRequest solicitud, httpServletResponse Respuesta) lanza ServletException, ioexception {Response.setContType ("texto/html"); // Obtener el atributo de nombre del nombre del campo de solicitud = request.getParameter ("nombre"); // deja que el hilo duerma durante 10 segundos, intente {Thread.sleep (10000); } catch (InterruptedException e) {E.PrintStackTrace (); } // valor de nombre de salida a la respuesta del navegador.getWriter (). Print ("name ="+name); }}Usamos dos navegadores para acceder a ThreadSafeServlet? Name = "Zhangsan" y ThreadSafeServlet? Name = "Lisi" en diez segundos. Los resultados son ambos name = Lisi, lo que significa que hay un problema con el programa. La lectura y la escritura concurrentes de múltiples subprocesos conducirá a datos fuera de la sincronización. Por lo tanto, al usar servlets, tratamos de no definir atributos privados globales, sino definir variables en métodos Doget () y dopost () respectivamente. Por supuesto, si es solo una operación de lectura, no habrá problema. Por lo tanto, si desea definir atributos globales de solo lectura en servlets, es mejor definir el tipo final.
La acción en Struts2 crea una instancia para cada solicitud. No hay diferencia entre la acción y las clases de Java ordinarias, y no habrá datos fuera de sincronización, por lo que es a prueba de subprocesos.
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.