package cn.danielw.fop; /** * @author Daniel * AutoCloseable.close() is not idemponent, so don't close it multiple times! */ public class Poolable<T> implements AutoCloseable { private final T object; private ObjectPool<T> pool; private final int partition; private long lastAccessTs; public Poolable(T t, ObjectPool<T> pool, int partition) { this.object = t; this.pool = pool; this.partition = partition; this.lastAccessTs = System.currentTimeMillis(); } public T getObject() { return object; } public ObjectPool<T> getPool() { return pool; } public int getPartition() { return partition; } public void returnObject() { pool.returnObject(this); } public long getLastAccessTs() { return lastAccessTs; } public void setLastAccessTs(long lastAccessTs) { this.lastAccessTs = lastAccessTs; } /** * This method is not idemponent, don't call it twice, which will return the object twice to the pool and cause severe problems. */ @Override public void close() { this.returnObject(); } }