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> implements Function { @Nonnull private final BlockingQueue items; private final Supplier supplier; public ObjectPool(int size, Supplier 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 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); } }