Java 原子的域更新器

在一个多线程环境中递增或递减一个原语类型时,使用在java.util.concurrent.atomic 包中找到的其中一个新原子类比编写自己的同步代码块要好得多。原子类确保某些操作以线程安全方式被执行,比如递增和递减一个值,更新一个值,添加一个值。原子类列表包括AtomicIntegerAtomicBooleanAtomicLongAtomicIntegerArray 等等。

使用原子类的难题在于,所有类操作,包括 getset 和一系列get-set 操作是以原子态呈现的。这表示,不修改原子变量值的readwrite 操作是同步的,不仅仅是重要的read-update-write 操作。如果您希望对同步代码的部署进行更多细粒度控制,那么解决方案就是使用一个原子的域更新器。

原子字段更新程序:AtomicIntegerFieldUpdater,AtomicLongFieldUpdater和AtomicReferenceFieldUpdater

AtomicReferenceFieldUpdater 实例:

public class FieldUpdaterTest {
	//不能是static
	//不能使final
	//必须是volatile
	public volatile String match;

	public static void main(String[] args) {
		FieldUpdaterTest t = new FieldUpdaterTest();
		t.match = "str";

		AtomicReferenceFieldUpdater<FieldUpdaterTest, String> matchUpdater = AtomicReferenceFieldUpdater
				.newUpdater(FieldUpdaterTest.class, String.class, "match");

		matchUpdater.compareAndSet(t, "str", "hello");
		System.out.println(t.match);

		matchUpdater.compareAndSet(t, "a", "world");
		System.out.println(t.match);
	}
}

参考资料:

http://www.ibm.com/developerworks/cn/java/j-5things15/#ibm-pcon

你可能感兴趣的:(java)