1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.common.util;
17
18 public class LongCounter {
19
20 long count;
21
22 public LongCounter() {
23 this(0);
24 }
25
26 public LongCounter(long startValue) {
27 super();
28 this.count = startValue;
29 }
30
31 public synchronized long increment() {
32 return increment(1);
33 }
34
35 public synchronized long increment(long amount) {
36 Assert.isTrue(amount > 0, "amount must be > 0");
37 Assert.isTrue(count <= Long.MAX_VALUE - amount, "max value exceeded");
38 return count += amount;
39 }
40
41 public synchronized long decrement(long amount) {
42 Assert.isTrue(amount > 0, "amount must be > 0");
43 Assert.isTrue(count >= Long.MIN_VALUE + amount, "min value exceeded");
44 return count -= amount;
45 }
46
47 public synchronized long decrement() {
48 return decrement(1);
49 }
50
51 public synchronized long getValue() {
52 return count;
53 }
54 }