こんにちは、私はこのようなクラス定義を持っています
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
}
dontIntercept ThreadLocal を設定したため、class1 が発生することはわかっています。私の疑問は、クラス2のものが起こるかどうかです? 私の論理では、JdbcInterceptor のインスタンスは 1 つしかないため、interrupt() へのすべての呼び出しで同じ状態を使用できるはずです。しかし、ThreadLocals はスレッドごとにローカルであると言われました。ここでいくつかの競合が見られます。これについて私を助けてください。