在JDK API文档搜索关键词 Atomic
eg: AtomicInteger AtomicIntegerArray 等, 细节请参看API
需要注意的是: jdk提供的这些类, 仅仅是针对多线程操作 成员变量时 提供的封装好的原子操作类,
如果是多线程下的局部变量,不需要这种类。
J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增、减、赋值(更新)操作。
以java多线程用法-使用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能够达到多而不乱,处理高并发应付自如,是因为硬件提供原子操作指令实现,
相对于第一种写法的加锁操作,后者在非激烈竞争的情况下,开销更小,速度更快。
Java.util.concurrent中实现的原子操作类包括:
AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。