@Override protected AbstractKeyedLimiter<?> makeLimiter(int limit) { return new KeyedExecutorLimiter(executor, limit, null, true, true); }
@Override public SubmitterExecutor makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) { SubmitterExecutor executor = schedulerFactory.makeSubmitterExecutor(poolSize * 2, prestartIfAvailable); KeyedExecutorLimiter limiter = new KeyedExecutorLimiter(executor, poolSize); return new SubmitterExecutor() { @Override public void execute(Runnable task) { limiter.execute("foo", task); } @Override public <T> ListenableFuture<T> submit(Runnable task, T result) { return limiter.submit("foo", task, result); } @Override public <T> ListenableFuture<T> submit(Callable<T> task) { return limiter.submit("foo", task); } }; }
@Override public SubmitterExecutor makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) { SubmitterExecutor executor = schedulerFactory.makeSubmitterExecutor(poolSize * 2, prestartIfAvailable); return new KeyedExecutorLimiter(executor, poolSize).getSubmitterExecutorForKey(new Object()); }
@Test @SuppressWarnings("unused") public void constructorFail() { try { new KeyedExecutorLimiter(null, 10); fail("Exception should have thrown"); } catch (IllegalArgumentException e) { // expected } try { new KeyedExecutorLimiter(SameThreadSubmitterExecutor.instance(), 0); fail("Exception should have thrown"); } catch (IllegalArgumentException e) { // expected } } }