package jane.core;
import java.util.ArrayList;
import java.util.List;
/**
* bean的对象池
* <p>
* 目前仅用于实验
*/
public final class BeanPool<B extends Bean<B>>
{
private final List<B> _freeList = new ArrayList<>();
private final B _stub;
private final int _maxFreeCount;
public BeanPool(B stub, int maxFreeCount)
{
_stub = stub;
_maxFreeCount = maxFreeCount;
}
public B alloc()
{
synchronized(this)
{
int n = _freeList.size();
if(n > 0) return _freeList.remove(n - 1);
}
return _stub.create();
}
public void free(B b)
{
b.reset();
synchronized(this)
{
if(_freeList.size() < _maxFreeCount)
_freeList.add(b);
}
}
}