Antes de falar sobre a segurança do tópico do Struts2, deixe -me falar sobre o que é segurança de threads? Foi o que um internautas disse.
Se o seu código estiver no processo em que você estiver, existem vários threads em execução ao mesmo tempo e esses threads podem executar esse código ao mesmo tempo. Se o resultado de cada execução for o mesmo que o resultado de uma única linha de encadeamento, e os valores de outras variáveis são os mesmos que o esperado, ela é segura por thread.
Ou seja, em um processo, vários threads são executados simultaneamente. Durante a execução de cada thread, os valores variáveis são os mesmos e os resultados da execução são os mesmos, que são seguros de threads. Caso contrário, o tópico é inseguro.
Em seguida, revise os problemas de segurança do tópico dos servlets. Como os servlets são o modo Singleton, apenas uma instância será gerada. Quando vários usuários solicitam um servlet ao mesmo tempo, o TomCat derivar vários threads para executar o código do servlet. Portanto, os servlets são seguros para fios. Se usado indevidamente, podem ocorrer problemas. Aqui está um exemplo:
pacote com.wang.servlet; importar java.io.ioexception; importar java.io.printwriter; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; import javax.servlet.http.httpTleTreQuest; javax.servlet.http.httpServletResponse; classe pública threadSafeServlet estende httpServlet {name de sequência privada; // define um nome de variável privada pública public void doget (httpServleTreQuest Solicy, httpSertResponse) // Obtenha o atributo de nome do nome do campo de solicitação = request.getParameter ("nome"); // Deixe o fio dormir por 10 segundos, tente {thread.sleep (10000); } catch (interruptedException e) {e.printStackTrace (); } // Valor do nome da saída para o navegador Response.getWriter (). Print ("name ="+nome); }}Usamos dois navegadores para acessar o ThreadSafeServlet? Nome = "Zhangsan" e ThreadSafeServlet? Nome = "Lisi" em dez segundos. Os resultados são o nome = lisi, o que significa que há um problema com o programa. A leitura e a escrita múltiplas de thread levarão a dados fora da sincronização. Portanto, ao usar servlets, tentamos não definir atributos privados globais, mas definimos variáveis nos métodos Doget () e DoPost (), respectivamente. Obviamente, se for apenas uma operação de leitura, não haverá problema. Portanto, se você deseja definir atributos globais somente leitura em servlets, é melhor definir o tipo final.
A ação no STRUTS2 cria uma instância para cada solicitação. Não há diferença entre as classes de ação e Java comuns, e não haverá dados fora da sincronização, por isso é seguro para threads.
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.