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

  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009
  • Microsoft Help & Training Videos

    Microsoft He

    31 Mart 2009
  • paikimchung

    paikimchung

    12 Mayıs 2006