Czy działa następująca podstawowa pula obiektów? Mam bardziej wyrafinowany, oparty na tym samym pomyśle (tj. Utrzymywanie zarówno semafora, jak i BlockingQueue). Moje pytanie brzmi - czy potrzebuję zarówno Semafora, jak i BlockingQueue? Czy mam rację, że nie muszę wykonywać żadnej synchronizacji?Czy działa ta podstawowa pula obiektów 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();
}
}
jakiegokolwiek powodu robisz to sam? Apache Commons Pool robi to z półki. – skaffman
Co ApacheCommonsPool zapewnia, że blockingQueue nie? Pobiera dużą bibliotekę, aby zdefiniować duży zestaw "standardowych" interfejsów, gdy java.util.concurrent.BlockingQueue obsługuje już wszystkie zdefiniowane operacje. – bhan
@skaffman możesz pomóc http://stackoverflow.com/questions/43860936/create-objects-in-genericobjectpool – Tony