1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.monitoring.counters;
18
19 import org.apache.commons.monitoring.Role;
20 import org.apache.commons.monitoring.store.DefaultDataStore;
21 import org.junit.Test;
22
23 import java.util.concurrent.ExecutorService;
24 import java.util.concurrent.Executors;
25 import java.util.concurrent.TimeUnit;
26
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 DefaultDataStore());
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