public ChannelBufferPool( final int minIdle, final int writeBufferPoolSize, final long validationInterval, AtmosphereConfig config) { this.writeBufferPoolSize = writeBufferPoolSize; initialize(minIdle); if (writeBufferPoolSize != -1) { ExecutorsFactory.getScheduler(config) .scheduleWithFixedDelay( new Runnable() { @Override public void run() { int size = pool.size(); if (size < minIdle) { int sizeToBeAdded = minIdle - size; for (int i = 0; i < sizeToBeAdded; i++) { pool.add(createObject()); } } else if (size > writeBufferPoolSize) { int sizeToBeRemoved = size - writeBufferPoolSize; for (int i = 0; i < sizeToBeRemoved; i++) { pool.poll(); } } } }, validationInterval, validationInterval, TimeUnit.SECONDS); config.shutdownHook( new AtmosphereConfig.ShutdownHook() { @Override public void shutdown() { pool.clear(); } }); } }