class Pool implements IPool {

    public void onAvailable(final IPoorAction action) {
        try {
            if (freeItemsCounter.get() > 0) {
                action.execute();
                return;
            }
            this.taskQueue.add(action);
        } catch (ActionExecuteException e) {
            throw new RuntimeException("Failed to execute PoorAction", e);
        }
    }

    public  Pool(final Integer maxItems, final Supplier<Object>  func);

}