Assume (for the following argument) that the application using Stats uses it to increment with only <b>values>=0</b>
Assume at some random point the value of the counter is at 42.

Assume two threads are trying to call resetCounter simultaneously:

When both threads A and B run parallel and finish the reset() method. The only expected(acceptable) result is zero.

No race condition should ever lead to a negative value. But, the following possible order of execution makes the value negative which is not acceptable for an app that has never submitted negative values on the increment method
* internalGetCounter() #from A; oldValueA = 42;
* internalGetCounter() #from B; oldValueB = 42;
* internalIncrementCounter(-oldValue) #from B; counterValue = 0;
* internalIncrementCounter(-oldValue) #from A; counterValue = -42

For an app that knows that it has no code to submit negative increments to the counter, this ^ condition might lead to confusion.

This makes it thread-unsafe with respect to a particular key. Do we want to do it this way?