Java 原子操作

-- Start

java.util.concurrent.atomic 包中提供了以下原子类, 它们是线程安全的类, 但是它们并不是通过同步和锁来实现的, 原子变量的操作会变为平台提供的用于并发访问的硬件原语.

  • AtomicBoolean -- 原子布尔
  • AtomicInteger -- 原子整型
  • AtomicIntegerArray -- 原子整型数组
  • AtomicLong -- 原子长整型
  • AtomicLongArray -- 原子长整型数组
  • AtomicReference -- 原子引用
  • AtomicReferenceArray -- 原子引用数组
  • AtomicMarkableReference -- 原子标记引用
  • AtomicStampedReference -- 原子戳记引用
  • AtomicIntegerFieldUpdater -- 用来包裹对整形 volatile 域的原子操作
  • AtomicLongFieldUpdater -- 用来包裹对长整型 volatile 域的原子操作
  • AtomicReferenceFieldUpdater -- 用来包裹对对象 volatile 域的原子操作

引入这些类的主要原因是为了实现一种所谓的无锁定且无等待算法. 如: 比较并交换 (CAS), 它的原理是比较当前值与期望值, 如果相同则表示该变量没有发生变化. 如下面的例子使用同步和CAS方式来实现一个ID生成器.

同步实现方式

class IDGenerator {
	private int id;

	public IDGenerator() {
	}

	public synchronized int nextInt() {
		return ++id;
	}
}

CAS实现方式

class IDGenerator {
	private final AtomicInteger id = new AtomicInteger(0);

	public IDGenerator() {
	}

	public int nextInt() {
		while (true) {
			int oldID = id.get();
			int newID = oldID + 1;
			if (id.compareAndSet(oldID, newID))
				return newID;
		}
	}
}


--- 更多参见: Java 精萃
-- 声 明:转载请注明出处
-- Last Updated on 2012-07-16
-- Written by ShangBo on 2012-07-16
-- End

你可能感兴趣的:(java,算法,Class,平台)