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
二维码