Работает ли следующий пул базовых объектов? У меня более сложный подход, основанный на той же идее (т. Е. Поддерживающей как Семафор, так и BlockingQueue). Мой вопрос: мне нужны как Семафор, так и BlockingQueue? Правильно ли, что мне не нужна синхронизация?Работает ли этот базовый пул объектов Java?
import java.util.Collection;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Semaphore;
public final class Pool<T> {
private final BlockingQueue<T> objects;
private final Semaphore permits;
public Pool(Collection<? extends T> objects) {
// we have as many permits as objects in our pool:
this.permits = new Semaphore(objects.size());
this.objects = new ArrayBlockingQueue<T>(objects.size(), false, objects);
}
public T borrow() {
this.permits.acquireUninterruptibly();
// we have a permit, so there must be one in there:
return this.objects.poll();
}
public void giveBack(T object) {
this.objects.add(object);
this.permits.release();
}
}
какой-либо причине вы делаете это сами? Apache Commons Pool делает это с полки. – skaffman
Что делает ApacheCommonsPool, что блокировкаQueue не делает? Он втягивает большую библиотеку, чтобы определить большой набор «стандартных» интерфейсов, когда java.util.concurrent.BlockingQueue уже поддерживает все определенные операции. – bhan
@ skaffman вы можете помочь http://stackoverflow.com/questions/43860936/create-objects-in-genericobjectpool – Tony