可清除的单例对象获取类

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

}

 

posted @ 2019-08-24 11:35  数学与IT  阅读(155)  评论(0)    收藏  举报