Singleton object class acquisition clears

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();

}

 

Guess you like

Origin www.cnblogs.com/math-and-it/p/11404054.html