2012-12-08 3 views
0

시작 : 나는 오픈 소스 소프트웨어의 초보자입니다. (Apache-Tomcat/Java/Restletframework)스레드 안전성 및 정적 하위 클래스

내 질문은 다음과 같습니다. Restlet 프레임 워크를 사용하여 응용 프로그램을 빌드하고 있습니다. 내 코딩/methody 스레드 안전하다고 나도 몰라!? 누군가 내가 코딩하고 있는지/말해도 될까요? 아니면 나는 절망적으로 실패하고 있는가?

구성 :

  • CLASS A가 클라이언트에 의해 호출됩니다. (나머지 요청)
  • 의 클래스 A (라우터)
  • CLASS의 B 내 중앙 요청 핸들러의 클래스 B 호출,이 클래스 B가
  • 클래스 C가 요청 된 실제 서비스 또 다른 부류의 C 호출 이 예제에서 login-service -

로그인 하위 클래스는 고정되어 있습니다. 스레드로부터 안전한 구조입니까? 여러 스레드 일부 공유 상태에 액세스하는 경우

감사

클래스 A

public class MyStartApplication extends Application { 


//Creates a root Restlet that will receive all incoming calls. 

@Override 
//public synchronized Restlet createInboundRoot() { //synchronized? 
public Restlet createInboundRoot() { 


    //Create a router that routes each call to a new instance of a Resource. 
    Router router = new Router(getContext()); 

    // First we use MODE_START_WITH to determine the requested destination 
    // A TRAPDOOR for all requests for this TEST 
    // We reroute it to THE CENTRAL RESTLET-WRAPPER 
TemplateRoute route = router.attach("/testmywrapper/", RestletWrapper.class); 
    route.getTemplate().setMatchingMode(Template.MODE_STARTS_WITH); 


    // Return the response to caller 
    return router; 


} 

} 

B 급

public class RestletWrapper extends ServerResource { 

@Get 
public JSONObject start() { 

    JSONObject returnObj = null; 

    switch(operation){ 
    case "login": 
     returnObj= LoginUser.login(queryparams); 
     break; 
    } 

    Return returnObj 
} 
} 

의 클래스 C

public class LoginUser { 


public static JSONObject login(JSONObject queryparams) throws Exception { 
    do some stuff 
    return object 
} 
} 

답변

0

스레드 안전 문제가 될 수 있습니다.

"do some stuff"뒤에 숨겨진 코드가 정적 필드 나 싱글 톤을 사용하지 않는 한 스레드 안전 문제가 없어야합니다. 모든 변수는 로그인 메소드에 대해 로컬이므로 스레드간에 공유되지 않습니다.

+0

하위 클래스가 "정적"으로 정의 된 문제는 스레드가 안전하지 않은 경우가 아닙니까? – user1887511

+0

그리고 첫 번째 Restlet-Starter-Application의 "sychronized"키워드에 대해 궁금 해서요. 새 Restlet 버전의 createInboundRoot() 하위 클래스에서 제거되었습니다. 반드시 해당 키워드를 구형 Restlet 버전 및/또는 스레드 안전성에 영향을 미치지 않습니까? – user1887511

+0

나는 레스 렛에 대해서 모른다. 설명서를 읽으십시오. 또한 "정적 하위 클래스"가 없습니다. 당신은 정적 방법이 있습니다. 로컬 변수만을 사용하는 static 또는 not 메소드는 본질적으로 쓰레드에 안전합니다. 이것이 로그인 메소드의 경우이며, queryparams 객체가 쓰레드들 사이에서 공유되지 않는다면 (그리고 쓰레드간에 공유되지 않는 것처럼 보입니다),이 메소드는 쓰레드 - 안전합니다. –