我需要long
具有以下要求/事实的类型计数器:
- 递增计数器应该花费尽可能少的时间。
- 计数器只会被一个线程写入。
- 从计数器读取将在另一个线程中完成。
- 计数器会定期递增(每秒最多几千次),但每五秒只会读取一次。
- 精确的准确性不是必需的,只需粗略了解计数器的大小就足够了。
- 计数器永远不会被清零,递减。
基于这些要求,您将如何选择实施您的计数器?作为一个简单的long
,作为一个volatile long
或使用一个AtomicLong
?为什么?
目前我有一个volatile long
但想知道另一种方法是否会更好。我也通过做++counter
而不是增加我的长期counter++
。因为没有完成任务,这真的更有效吗(正如我在其他地方被引导相信的那样)?