import java.util.concurrent.TimeUnit;
import stormpot.Allocator;
import stormpot.BlazePool;
import stormpot.Config;
import stormpot.Pool;
import stormpot.Poolable;
import stormpot.Slot;
import stormpot.Timeout;
/**
*
* @author Franz
*/
public class StormpotPoolTest {
private static final class PoolableStringBuilder implements Poolable {
private final Slot slot;
private final StringBuilder builder = new StringBuilder();
public PoolableStringBuilder(Slot slot) {
this.slot = slot;
}
@Override
public void release() {
slot.release(this);
}
}
private static enum PoolableStringBuilderAllocator implements Allocator<PoolableStringBuilder> {
Instance;
@Override
public PoolableStringBuilder allocate(Slot slot) throws Exception {
return new PoolableStringBuilder(slot);
}
@Override
public void deallocate(PoolableStringBuilder poolable) throws Exception {
}
}
private static final int TESTS = 5;
private static final int OPS = 100_000_000;
private static final Timeout NO_WAIT = new Timeout(0, TimeUnit.NANOSECONDS);
public static void main(String[] args) throws InterruptedException {
final Config<PoolableStringBuilder> config = new Config<>()
.setAllocator(PoolableStringBuilderAllocator.Instance)
.setBackgroundExpirationEnabled(false)
.setThreadFactory(task -> {
final Thread thread = new Thread(task);
thread.setDaemon(true);
return thread;
});
final Pool<PoolableStringBuilder> pool = new BlazePool<>(config);
test(pool);
System.out.println("warmup");
for (int i = 0; i < TESTS; i++) {
for (int o = 0; o < 100_000; o++) {
test(pool);
}
}
System.out.println("end warmup");
for (int i = 0; i < TESTS; i++) {
final long start = System.nanoTime();
for (int o = 0; o < OPS; o++) {
}
final long elapsed = System.nanoTime() - start;
System.out.print((OPS * 1000_000_000L) / elapsed);
System.out.println(" ops/sec");
}
}
private static void test(Pool<PoolableStringBuilder> pool) throws InterruptedException {
final PoolableStringBuilder pooleable = pool.claim(NO_WAIT);
final StringBuilder acquired = pooleable.builder;
acquired.setLength(0);
acquired.append("prova");
pooleable.release();
}
}
While running it...
Exception in thread "main" java.lang.NullPointerException
at com.telbios.pool.bench.StormpotPoolTest$PoolableStringBuilder.access$000(StormpotPoolTest.java:24)
at com.telbios.pool.bench.test(StormpotPoolTest.java:92)
at com.telbios.pool.bench.main(StormpotPoolTest.java:70)
Please correct me if i'm wrong...