package base_class;
public abstract class EnableCleanSingle<T>{
protected volatile T object;
private int updateCount;
public synchronized T getObject() {
if(object == null) {
createObject();
updateCount++;
}
return object;
}
public void cleanObject(){
int old = updateCount;
if(object != null) {
synchronized(this) {
if (updateCount == old) {
object = null;
}
}
}
}
public int getUpdateCount() {
return updateCount;
}
abstract public T createObject();
}