Does this basic Java object pool work?
•
Java
Are the following basic object pools working properly? I have a more complex one based on the same idea (i.e. maintaining a semaphore and a BlockingQueue) My question is – do I need to use semaphores and BlockingQueue at the same time? I'm right. Don't I need to do any synchronization?
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();
}
}
Solution
As already pointed out, a limited BlockingQueue is sufficient For example, the following code will do what you want:
import java.util.Collection;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public final class Pool<T> {
private final BlockingQueue<T> objects;
public Pool(Collection<? extends T> objects) {
this.objects = new ArrayBlockingQueue<T>(objects.size(),objects);
}
public T borrow() throws InterruptedException {
return this.objects.take();
}
public void giveBack(T object) throws InterruptedException {
this.objects.put(object);
}
}
In addition, you may need to consider using BlockingQueue Poll() to support borrowing the scheduled version of ()
If you do not have limited blocking queue data structures, you can impose a semaphore on any data structure to create thread safe and binding behavior
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
