public ReferenceCounterUtil(Runnable runnable, Executor executor) { this.setTask(runnable); this.executor = executor; }
@Override public int decrement() { int value = uses.decrementAndGet(); if (value == 0) { execute(); } return value; }
@Test public void testReferenceValidExecutorUsed() throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(ActiveMQThreadFactory.defaultThreadFactory()); LatchRunner runner = new LatchRunner(); ReferenceCounterUtil counter = new ReferenceCounterUtil(runner, executor); counter.increment(); counter.decrement(); runner.latch.await(5, TimeUnit.SECONDS); assertNotSame(runner.lastThreadUsed, Thread.currentThread()); runner.latch.setCount(1); runner.lastThreadUsed = Thread.currentThread(); // force a recheck counter.check(); runner.latch.await(5, TimeUnit.SECONDS); assertNotSame(runner.lastThreadUsed, Thread.currentThread()); executor.shutdown(); }
@Override public void run() { ref.decrement(); } };
ref = new ReferenceCounterUtil(runner); } else { ref = new ReferenceCounterUtil(runner, executor);
@Override public int decrement() { int value = uses.decrementAndGet(); if (value == 0) { execute(); } return value; }
public ReferenceCounterUtil(Runnable runnable) { this.setTask(runnable); this.executor = null; }
@Override public int decrement() { int value = uses.decrementAndGet(); if (value == 0) { execute(); } return value; }
public ReferenceCounterUtil(Runnable runnable, Executor executor) { this.setTask(runnable); this.executor = executor; }
@Override public int decrement() { int value = uses.decrementAndGet(); if (value == 0) { execute(); } return value; }
public ReferenceCounterUtil(Runnable runnable) { this.setTask(runnable); this.executor = null; }
@Override public int decrement() { int value = uses.decrementAndGet(); if (value == 0) { execute(); } return value; }
public ReferenceCounterUtil(Runnable runnable, Executor executor) { this.setTask(runnable); this.executor = executor; }
@Override public int decrement() { int value = uses.decrementAndGet(); if (value == 0) { execute(); } return value; }