Java原子のドメイン更新器
1405 ワード
マルチスレッド環境で原語タイプを1つ増やしたり減らしたりする場合、
原子系を使用する難題は、
原子フィールド更新プログラム:AtomicIntegerFieldUpdater,AtomicLongFieldUpdaterおよびAtomicReferenceFieldUpdater
AtomicReferenceFieldUpdaterの例:
参考資料:
http://www.ibm.com/developerworks/cn/java/j-5things15/#ibm-pcon
java.util.concurrent.atomic
パケットで見つかった新しい原子クラスの1つを使用すると、自分の同期コードブロックを記述するよりもずっと良い.原子クラスは、値の増加と減少、値の更新、値の追加など、一部の操作がスレッドセキュリティで実行されることを保証します.原子類リストには、AtomicInteger
・AtomicBoolean
・AtomicLong
・AtomicIntegerArray
などがある.原子系を使用する難題は、
get
・set
および一連get-set
を含む全てのクラスの動作が原子状態で現れることである.これは,原子変数値を変更しないread
・write
操作と同期しており,重要な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