com.firefly.utils.lang.pool.PooledObject Maven / Gradle / Ivy
package com.firefly.utils.lang.pool;
import com.firefly.utils.time.Millisecond100Clock;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author Pengtao Qiu
*/
public class PooledObject {
private final T object;
private final long createTime;
private long activeTime;
private AtomicBoolean released = new AtomicBoolean(false);
public PooledObject(T object) {
this.object = object;
createTime = Millisecond100Clock.currentTimeMillis();
activeTime = createTime;
}
boolean prepareTake() {
return released.compareAndSet(true, false);
}
boolean prepareRelease() {
return released.compareAndSet(false, true);
}
public boolean isReleased() {
return released.get();
}
public T getObject() {
activeTime = Millisecond100Clock.currentTimeMillis();
return object;
}
public long getCreateTime() {
return createTime;
}
public long getActiveTime() {
return activeTime;
}
}