public abstract class EnableCleanSingle<T>{
private volatile T object;
private int updateCount;
public T getObject() {
if(object == null) {
synchronized (this){
if(object == null) {
createObject();
updateCount++;
}
}
}
return object;
}
public void cleanObject(){
int old = updateCount;
if(object != null) {
synchronized (this) {
if (updateCount == old) {
object = null;
}
}
}
}
abstract public T createObject();
}
原文:https://www.cnblogs.com/math-and-it/p/11404054.html