com.yahoo.yolean.concurrent.ResourcePool Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vespajlib Show documentation
Show all versions of vespajlib Show documentation
Library for use in Java components of Vespa. Shared code which do
not fit anywhere else.
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.yolean.concurrent;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import java.util.function.Supplier;
/**
* This implements a simple stack based resource pool. If you are out of resources new are allocated from the
* factory.
*
* @author baldersheim
* @since 5.2
*/
public final class ResourcePool implements Iterable {
private final Deque pool = new ArrayDeque<>();
private final Supplier factory;
public ResourcePool(Supplier factory) {
this.factory = factory;
}
public T alloc() {
return pool.isEmpty() ? factory.get() : pool.pop();
}
public void free(T e) {
pool.push(e);
}
@Override
public Iterator iterator() {
return pool.iterator();
}
}