您的位置:首页 > 其它

AtomicInteger介绍

2016-02-17 12:34 253 查看

一.概述

AtomicInteger是JDK1.5提供的一个支持原子操作的 Integer 类,就是保证对AtomicInteger类型变量的增加和减少操作是原子性的,不会出现多个线程下的数据不一致问题。如果不使用 AtomicInteger,要实现一个按顺序获取的 ID,就必须在每次获取时进行加锁操作,以避免出现并发时获取到同样的 ID 的现象。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

二.实例

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

[code]    class Counter1 {
            private volatile int count = 0;

            public synchronized void increment() {
                count++; // 若要线程安全执行执行count++,需要加锁
            }

            public int getCount() {
                return count;
            }
        }

        class Counter2 {
            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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: