Struts2의 스레드 안전에 대해 이야기하기 전에 먼저 실 안전이 무엇인지 이야기하겠습니다. 이것이 네티즌이 말한 것입니다.
코드가있는 프로세스에있는 경우 동시에 여러 스레드가 실행되며 이러한 스레드는 동시에이 코드를 실행할 수 있습니다. 각 실행 결과가 단일 스레드 실행 결과와 동일하고 다른 변수의 값이 예상과 동일하면 스레드 안전입니다.
즉, 프로세스에서 여러 스레드가 동시에 실행됩니다. 각 스레드의 실행 중에 변수 값은 동일하고 실행 결과는 동일하며 이는 스레드 안전입니다. 그렇지 않으면 실이 안전하지 않습니다.
그런 다음 서블릿의 스레드 안전 문제를 검토하십시오. 서블릿은 싱글 톤 모드이므로 하나의 인스턴스 만 생성됩니다. 여러 사용자가 동시에 서블릿을 요청하면 Tomcat은 여러 스레드를 도출하여 서블릿 코드를 실행합니다. 따라서 서블릿은 스레드 안전입니다. 부적절하게 사용하면 문제가 발생할 수 있습니다. 예는 다음과 같습니다.
패키지 com.wang.servlet; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.htttp.httpservlet; import javax.servlet.htttp.httpservletrequest; import javax.servlet.http.htttp.httpservletresponse; public class orthdrestservlet는 httpservlet {private string name; // 공개 개인 변수 이름 공개 void doget (httpservletrequest request)을 정의합니다. // 요청 필드에서 이름 속성을 가져옵니다. 이름 = request.getParameter ( "name"); // 스레드가 10 초 동안 잠을 자도록하십시오 {thread.sleep (10000); } catch (InterruptedException e) {e.printstacktrace (); } // 브라우저에 대한 출력 이름 값 response.getWriter (). print ( "name ="+name); }}우리는 두 개의 브라우저를 사용하여 ThreadSafeservlet? name = "zhangsan"및 threadSafeservlet? name = "lisi"에 액세스하여 10 초 안에 액세스합니다. 결과는 모두 Name = Lisi이므로 프로그램에 문제가 있음을 의미합니다. 멀티 스레드 동시 읽기 및 쓰기는 동기화에서 데이터로 이어질 것입니다. 따라서 서블릿을 사용할 때는 글로벌 개인 속성을 정의하지 않고 변수를 각각 doget () 및 dopost () 메소드로 정의하려고합니다. 물론, 그것이 단지 읽기 작업 일 경우, 아무런 문제가 없을 것입니다. 따라서 서블릿에서 글로벌 읽기 전용 속성을 정의하려면 최종 유형을 정의하는 것이 가장 좋습니다.
struts2의 조치 각 요청에 대한 인스턴스를 만듭니다. 동작과 일반 Java 클래스에는 차이가 없으며 동기화되지 않은 데이터가 없으므로 스레드 안전입니다.
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.