GWT服务器端代码中的变量

时间:2012-03-15 18:07:22

标签: gwt variables servlets

我是GWT的新手,之前从未使用过Java Servlets。我知道如何制作RPC,但我想知道在RPC的ServiceImpl / RemoteServiceServlet类中声明成员变量是否存在任何并发问题。即从多个“同时”RPC覆盖同一个变量,类似于当变量未声明为volatile时线程所发生的情况。

我还需要在我的服务器端代码中使用额外的线程,所以我想知道是否存在任何问题(在通常的线程安全问题之外)将一些servlet的成员声明为静态,以便其他线程可以访问没有引用servlet实例的变量。是否可以同时运行同一个RemoteServiceServlet类的多个实例?

E.g。

public class MyServiceImpl extends RemoteServiceServlet implements MyService {

    // Which of these variable declarations are a bad idea in a servlet?
    private String someVariable;
    private static String anotherVariable;
    volatile private static String multiThreadedVariable;

    public void init() { ... }
    ...
}

感谢。

1 个答案:

答案 0 :(得分:3)

Servlet是一个单例,因此MyServiceImpl类只有一个实例。通过引入这些状态变量,您将遇到线程安全问题,而不是因为可能存在多个MyServiceImpl实例,而是因为只有一个实例可以为您的所有请求提供服务。除非您同步访问这些变量,否则您将遇到线程安全问题,因此我建议您完全删除它们(很可能您甚至不需要它们)。