AtomicInteger类保证线程安全

J2SE 5.0提供了一组atomic class 来帮助我们简化同步处理。基本工作原理是使用了同步Synchronized的方法实现了对一个long,integer,对象的增、减、赋值(更新)操作,比如对于++运算符AtomicInteger可以将它持有的Integer能够atomic的递增,在需要访问两个或者两个以上atomic变量的程序代码(或者是对单一的atomic变量执行两个或者两个以上的操作)通常都需要被synchronized以便两者的操作能够被当作是一个atmoic的单元。

java多线程用法—使用AtomicInteger

下面通过简单的两个例子的对比来看一下AtomicInteger的强大功能

class Counter{
     private volatile int count = 0;
     
     public synchronized void increment(){
          count ++;  //若要线程安全执行count++,需要加锁
     }
    
     public int getCount(){
           return count;
     }
}

class Counter {
     private AtomicInteger count = new AtomicInteger();
 
     public void increment() {
          count.incrementAndGet();
     }
          //使用AtomicInteger之后,不需要加锁,也可以实现线程安全。
     public int getCount() {
           return count.get();
     }
}

从上面的例子中我们可以看出:使用AtomicInteger是非常安全的

那么为什么不使用计数器自加呢,例如count++ 这样的,因为这种计数是线程不安全的,高并发访问时统计会有误,而AtomicInteger为什么能够达到多而不乱处理高并发应付自如呢?

这是由硬件提供原子操作指令实现的,在非激烈竞争的情况下,开销更小,速度更快。java.util.concurrent实现的原子操作类包括:AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值