有关static的对象中的方法加synchronized的疑问

struts1中的类TokenProcessor
private static TokenProcessor instance = new TokenProcessor();
public static TokenProcessor getInstance() {
return instance;
}
其中有方法
public synchronized boolean isTokenValid(HttpServletRequest request,boolean reset){
// Retrieve the current session for this request
HttpSession session = request.getSession(false);
if (session == null) {
return false;
}

    String saved = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
    if (saved == null) {
        return false;
    }

    if (reset) {
        this.resetToken(request);
    }

    String token = request.getParameter(Constants.TOKEN_KEY);
    if (token == null) {
        return false;
    }

    return saved.equals(token);

}
这里为什么要加synchronized么?有哪位给讲一下?

HttpSession是线程不安全的。 本质上只有Request级别是线程安全的。

TokenProcessor 貌似是个典型的单例,加synchronized一般是为了防止多线程的时候出现线程不安全的情况

[quote]线程不安全我的理解是,多个线程去抢一个资源,但isTokenValid里没有全局变量,为什么还要加synchronized?不知道我的理解有没有错? [/quote]

[code="java"]private static TokenProcessor instance = new TokenProcessor();
public static TokenProcessor getInstance() {
return instance;
} [/code]

TokenProcessor 是static 的 只有一个对象!
就有多线程问题

:D 最简单的理解就是client新开了窗口,但是在容器中还是用了原来的session实例。