线程安全和静态子类

时间:2012-12-08 10:29:36

标签: restlet-2.0

开始:我是开源软件的新手。 (Apache-Tomcat / Java / Restletframework)

这是我的问题: 我正在使用Restlet框架构建一个应用程序。我不知道我的编码/方法 是线程安全的!?有人可以告诉我,我是否正确编码?或者我绝望地失败了?

构建体:

  • CLASS A将由客户调用。 (REST请求)
  • CLASS A(路由器)将调用CLASS B
  • CLASS B是我的中央请求处理程序,此CLASS B调用另一个CLASS C
  • CLASS C是请求的实际服务,在此示例中为login-service -

正如您所看到的,登录子类是静态的。这是一个线程安全的构造吗?

此致

CLASS 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;


}

}

CLASS B

public class RestletWrapper extends ServerResource {

@Get
public JSONObject start()    {

    JSONObject returnObj = null;

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

    Return returnObj
}
}

CLASS C

public class LoginUser {


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

1 个答案:

答案 0 :(得分:0)

如果多个线程访问某些共享状态,则线程安全可能会成为问题。

除非隐藏在“do some stuff”后面的代码使用静态字段或单例,否则应该没有线程安全问题:所有变量都是login方法的本地变量,因此不会在线程之间共享。