Page MenuHomec4science

BlockingObjectPool.java
No OneTemporary

File Metadata

Created
Tue, May 7, 09:10

BlockingObjectPool.java

package com.yahoo.ycsb;
import java.util.Objects;
import java.util.concurrent.LinkedBlockingQueue;
/**
*
*/
public class BlockingObjectPool<T> extends AbstractObjectPool<T> {
public BlockingObjectPool(int maxObjects, ObjectPoolItemHandler<T> itemHandler) {
super(maxObjects, itemHandler);
this.available = new LinkedBlockingQueue<>(maxObjects);
}
@Override
public T take() {
if (closed) {
throw new PoolAlreadyClosedException();
}
T object = available.poll();
if (object == null) {
int currentCount = objectCount.getAndUpdate(count -> count == maxObjects ? count : count + 1);
if (currentCount == maxObjects) {
while (object == null) {
try {
object = ((LinkedBlockingQueue<T>) available).take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} else {
object = itemHandler.create();
}
}
checkedOut.put(object, Objects.requireNonNull(object));
return object;
}
}

Event Timeline