HyCodeYourTale
classpublicPriority 3

ObjectPool

com.hypixel.hytale.server.worldgen.util.ObjectPool

4

Methods

4

Public Methods

2

Fields

1

Constructors

Constructors

public
ObjectPool(int size, Supplier<T> supplier)

Methods

Public Methods (4)

public
T acquire()
public
T apply(T cachedKey)
public
<K extends T> void recycle(K v)
public
int size()

Fields

Private/Package Fields (2)

privateBlockingQueue<T> items
privateSupplier<T> supplier

Source Code

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);
   }
}