class ResourcePool {

    public final void release()
    {
        Thread thread = Thread.currentThread();
        R resource = current.remove( thread );
        if ( resource != null )
        {
            boolean dead = false;
            synchronized ( unused )
            {
                if ( unused.size() < targetSize )
                {
                    unused.add( resource );
                }
                else
                {
                    dead = true;
                }
            }
            if ( dead )
            {
                dispose( resource );
                monitor.disposed( resource );
            }
        }
    }

    protected  ResourcePool( int minSize );
    protected  ResourcePool( int minSize, CheckStrategy strategy, Monitor<R> monitor );

}