Java原子のドメイン更新器

1405 ワード

マルチスレッド環境で原語タイプを1つ増やしたり減らしたりする場合、java.util.concurrent.atomicパケットで見つかった新しい原子クラスの1つを使用すると、自分の同期コードブロックを記述するよりもずっと良い.原子クラスは、値の増加と減少、値の更新、値の追加など、一部の操作がスレッドセキュリティで実行されることを保証します.原子類リストには、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