hytale-server/com/hypixel/hytale/server/worldgen/util/ObjectPool.java

36 lines
909 B
Java

package com.hypixel.hytale.server.worldgen.util;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.function.Function;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
public class ObjectPool<T extends Function<T, T>> implements Function<T, T> {
@Nonnull
private final BlockingQueue<T> items;
private final Supplier<T> supplier;
public ObjectPool(int size, Supplier<T> supplier) {
this.items = new ArrayBlockingQueue<>(size);
this.supplier = supplier;
}
public T acquire() {
T v = this.items.poll();
return v == null ? this.supplier.get() : v;
}
public <K extends T> void recycle(@Nonnull K v) {
this.items.offer((T)v);
}
public int size() {
return this.items.size();
}
public T apply(T cachedKey) {
return this.acquire().apply(cachedKey);
}
}