首页 > 经验记录 > java > java中线程安全的计数/运算_AtomicInteger原子操作类

java中线程安全的计数/运算_AtomicInteger原子操作类

在实际业务中进行部分功能的开发时,不可避免的会遇上算数运算、计数等操作。

最典型的表现就是代码中一个又一个的 i++ (或者 num++ 之类的) 、i – – 等自增自减运算。

 

在普通的应用中当然可以这样。但是如果是一个上线的业务,一定会遇到并发访问的情况。

或许是多个线程(比如web请求)对某一方法中的公有变量进行增减。

也或者是实现功能的线程需要对某个值进行动态更改并且获取。

 

如果只是使用普通的加减运算,数量较少还好。但是如果进行的计算比较多、线程也比较多的话,那么普通的加减运算则不能做到足够精准。

java 便在 java.util.concurrent.atomic 包下提供了几个原子操作类比如 AtomicBoolean、AtomicLong、AtomicInteger。

这里主要说 AtomicInteger,其他的也差不了多少,去翻一翻 API 就好啦

 

JDK1.6 的 API 对该类的描述(最新的汉化版就是 1.6的 啦) 可以看一下:

可以用原子方式更新的 int 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。

 

AtomicInteger类主要方法:

 

建议在多线程环境下将

int i = 1;

i++;

替换为

AtomicInteger atomicInteger = new AtomicInteger(1);

atomicInteger.getAndIncrement();

 

           


EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00