Java.util.concurrent.atomic包下提供了机器底层级别实现的多线程环境下原子操作,相比自己实现类似的功能更加高效。
AtomicInteger提供了
intValue() 获取当前值
incrementAndGet() 相当于++i
getAndIncrement相当于i++
从getAndIncrement实现“原子”操作的角度上来说,原子级别的给整数加一,返回未加一之前的值。它的职责是明确的,是符合单一职责的。
从接口隔离原则上看,也是符合的,因为AtomicInteger封装了原子级别的整数操作。
补充:
多线程环境下如果需要计数的话不需旧的值时,推荐使用LongAdder或者LongAccumulator(CoreJava上说更加高效,但我对比了AtomicLong和LongAdder,没感觉效率上有提高,可能是例子写的不够准确。测试代码见 https://github.com/gdhucoder/Algorithms4/tree/master/designpattern/u18 希望和小伙伴们一起讨论)
展开