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实例。