| 27 | import static org.junit.Assert.assertEquals; |
| 28 | |
| 29 | public class CounterBench implements Runnable { |
| 30 | private static final int THREADS = 30; |
| 31 | private static final int LOOPS = 20000000; |
| 32 | |
| 33 | private Counter counter; |
| 34 | private String mode; |
| 35 | |
| 36 | @Test |
| 37 | public void defaultCounter() throws Exception { |
| 38 | mode = "RentrantLockCounter"; |
| 39 | counter = new DefaultCounter(new Counter.Key(Role.FAILURES, mode), new InMemoryCounterDataStore()); |
| 40 | runConcurrent(); |
| 41 | } |
| 42 | |
| 43 | private void runConcurrent() throws InterruptedException { |
| 44 | final long start = System.nanoTime(); |
| 45 | final ExecutorService pool = Executors.newFixedThreadPool(THREADS); |
| 46 | for (int i = 0; i < LOOPS; i++) { |
| 47 | pool.submit(this); |
| 48 | } |
| 49 | pool.shutdown(); |
| 50 | pool.awaitTermination(60, TimeUnit.SECONDS); |
| 51 | |
| 52 | final long duration = System.nanoTime() - start; |
| 53 | System.out.printf("%s : %,d ns/operation %n\n", mode, duration / LOOPS); |
| 54 | assertEquals(LOOPS, counter.getSum(), 0); |
| 55 | |
| 56 | } |
| 57 | |
| 58 | public void run() { |
| 59 | counter.add(1, Unit.UNARY); |
| 60 | } |
| 61 | } |
| 62 | |
| 63 |
nothing calls this directly
no outgoing calls
no test coverage detected