您好我有类定义这样ThreadLocal的行为
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
,我这样做是一些其他的Class1现在
//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对于每个线程都是本地的。我在这里看到一些冲突。请帮助我。
冲突我的意思是只有一个类的实例返回成员变量的不同值之间的冲突。 – 2010-01-29 09:05:33
编辑的代码显示我如何设置跳到假。 – 2010-01-29 09:19:19
如果这是你的意图,这不是冲突。 ThreadLocals用于此目的。对于新代码,由于在class1中执行的值始终设置为“true”,方法跳过,然后重置为“false”,所以事件顺序不同。使用新代码没有理由 - 只需删除class1中的代码并删除class2中的if if即可。 – 2010-01-29 09:48:13