SORU
18 EKİM 2010, PAZARTESİ


Java AtomicReference ne zaman kullanılır?

Ne zaman AtomicReference kullanırız. Tüm parçacıklı programlarda nesneleri oluşturmak için gereklidir. AtomicReference kullanılmalıdır basit bir örnek verebilir misiniz.

CEVAP
18 EKİM 2010, PAZARTESİ


Atom referans monitor tabanlı eşitleme için uygun değil başvuru, basit atom (örneğin, iş parçacığı güvenli ve non-önemsiz) işlemleri yapmak için gereken bir ortamda kullanılmalıdır. Eğer nesnenin durumunu son kontrol olarak kalırsa, sadece belirli bir alan olmadığını görmek için kontrol etmek istediğinizi varsayalım:

AtomicReference<Object> cache = new AtomicReference<Object>();

Object cachedValue = new Object();
cache.set(cachedValue);

//... time passes ...
Object cachedValueToUpdate = cache.get();
//... do some work to transform cachedValueToUpdate into a new version
Object newValue = someFunctionOfOld(cachedValueToUpdate);
boolean success = cache.compareAndSet(cachedValue,cachedValueToUpdate);

Atom referans mantığı yüzünden, Eğer cache nesne synchronized kullanmadan iş parçacıkları arasında paylaşılan, varsa bile bunu yapabilirsiniz. Genel olarak, ne yaptığınızı bilmiyorsanız bir eşitleyici veya java.util.concurrent çerçeve kullanmak yerine 5* *çıplak daha iyi olursun.

Bu konu tanıtacağım ölü ağaç iki mükemmel referanslar: Herlihy's excellent Art of Multiprocessor Programming Java Concurrency in Practice.

Not (bilmiyorum bu her zaman true) başvuru atama (yani, =) kendisi atom (güncelleme ilkel 64-bit türleri(uzun/çift) olmayabilir atom; ama güncelleme bir referanstır her zaman atom, olsa bile 64 bit) olmadan açıkça kullanarak bir Atomic*. JLS 3ed, Section 17.7, bkz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andyabc45

    andyabc45

    1 Mayıs 2011
  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011
  • fireflame65

    fireflame65

    27 Mart 2007