嗨,我有这样的类定义
public class JdbcInterceptor {
private static final JdbcInterceptor instance = new JdbcInterceptor();
private static ThreadLocal<Boolean> dontIntercept = new ThreadLocal<Boolean>();
public static JdbcInterceptor getInstance() {
return instance;
}
public void skipIntercept() {
dontIntercept.set(true);
}
public boolean interrupt() {
boolean di = dontIntercept.get()!=null?dontIntercept.get().booleanValue():false;
if (di) {
dontIntercept.set(false);
}
return di;
}// end interrupt
}// end class
我在其他一些类1中这样做
//class1 stuff
JdbcInterceptor.getInstance().skipIntercept();
if(JdbcInterceptor.getInstance().interrupt())
{ // class1 stuff happens
}
现在我在class2做这个
//class2 stuff
if(JdbcInterceptor.getInstance().interrupt())
{ // class2 stuff happens
}
现在我有点困惑,我知道 class1 的事情会发生,因为我设置了 dontIntercept ThreadLocal。我的疑问是class2的东西是否会发生?我的逻辑是我只有一个 JdbcInterceptor 实例,因此在所有对 interrupt() 的调用中都应该有相同的状态。但有人告诉我 ThreadLocals 对于每个线程都是本地的。我在这里看到了一些冲突。请帮助我。