2011-05-04 6 views

답변

4

처럼은 checkAction 방법은 포함 개체의 고유 잠금 (Action 클래스 개체의 잠금)에 의해 동기화 될 것입니다 의미합니다. 따라서 한 번에 하나의 스레드 만 checkAction 메소드에 액세스 할 수 있습니다.

Struts 1에서 Action 클래스는 스레드로부터 안전하지 않습니다. 따라서 여러 스레드 (예 : 여러 요청 처리)는 Action 클래스의 동일한 인스턴스에 액세스합니다. 메서드를 동기화해야합니까? 확실하지 않습니다 - 방법으로 어떤 일이 일어나는지 만 알 수 있습니다. Action 클래스의 인스턴스 변수에 액세스하지 않거나 한 번에 하나의 스레드에서만 수행 할 수있는 작업을 수행하는 경우 동기화가 필요하지 않습니다.

+0

위의 답변에 대한 나의 해석을 달리 말하면 내가 올바르게 이해할 수 있습니다. 즉, Struts 1 Action 클래스는 스레드로부터 안전하지 않으므로 싱글 톤이기 때문에 Struts Action 클래스 내부에서 한 번에 하나의 스레드 만 액세스 할 수 있습니다. 고마워. –

+1

Action 클래스 내에서 동기화 된 메서드를 사용하면 한 번에 하나의 스레드에만 액세스 할 수 있습니다. 동기화되지 않으면 많은 스레드가 들어올 수 있습니다 (일반적으로 Action bean에서 상태 변수를 사용하지 않는 이유는 무엇입니까?) – planetjones

+1

예, 동기화는이 문제의 올바른 해결책이 아닙니다. 병목 현상이 생깁니다. 올바른 해결책은 로컬 변수 만 사용하는 것입니다. 인스턴스 변수가 없으면 동기화가 필요하지 않습니다. 인스턴스 변수를 원할 경우, 도우미 클래스를 작성하여 거기에 넣고 각 요청에 대한 도우미를 인스턴스화하십시오. –