@Override public T create() { created.incrementAndGet(); return super.create(); }
@Override protected Holder<T> poll() { Holder<T> holder = super.poll(); if (holder == null && created.get() == limitSize) { synchronized (this) { while ((holder = super.poll()) == null) { waits.incrementAndGet(); try { this.wait(); } catch (InterruptedException ignored) { } waits.decrementAndGet(); } } } return holder; }
@Override public void release(Holder<T> holder) { super.release(holder); if (waits.get() > 0) { synchronized (this) { if (waits.get() > 0) this.notify(); } } } };
pool = new QueuedPool<T>(supplier, queueSupplier, holderSupplier, resetter); } else { pool = new QueuedPool<T>(supplier, queueSupplier, holderSupplier, resetter) { AtomicInteger created = new AtomicInteger(); AtomicInteger waits = new AtomicInteger();
pool = new QueuedPool<T>(supplier, queueSupplier, holderSupplier, resetter); } else { pool = new QueuedPool<T>(supplier, queueSupplier, holderSupplier, resetter) { AtomicInteger created = new AtomicInteger(); AtomicInteger waits = new AtomicInteger();
@Override public void release(Holder<T> holder) { super.release(holder); if (waits.get() > 0) { synchronized (this) { if (waits.get() > 0) this.notify(); } } } };
@Override public T create() { created.incrementAndGet(); return super.create(); }
@Override protected Holder<T> poll() { Holder<T> holder = super.poll(); if (holder == null && created.get() == limitSize) { synchronized (this) { while ((holder = super.poll()) == null) { waits.incrementAndGet(); try { this.wait(); } catch (InterruptedException ignored) { } waits.decrementAndGet(); } } } return holder; }