PerThreadSingleton.java 源代码
package org.dom4j.util;
import java.lang.ref.WeakReference;
public class PerThreadSingleton implements SingletonStrategy {
private String singletonClassName = null;
private ThreadLocal perThreadCache = new ThreadLocal();
@Override
public void reset() {
this.perThreadCache = new ThreadLocal();
}
@Override
public Object instance() {
Object obj;
WeakReference weakReference = (WeakReference) this.perThreadCache.get();
if (weakReference == null || weakReference.get() == null) {
try {
try {
obj = Thread.currentThread().getContextClassLoader().loadClass(this.singletonClassName).newInstance();
} catch (Exception unused) {
obj = Class.forName(this.singletonClassName).newInstance();
}
} catch (Exception unused2) {
obj = null;
}
this.perThreadCache.set(new WeakReference(obj));
return obj;
}
return weakReference.get();
}
@Override
public void setSingletonClassName(String str) {
this.singletonClassName = str;
}
}