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

  • booba1234

    booba1234

    22 Temmuz 2006
  • Damian Winter

    Damian Winte

    27 ŞUBAT 2007
  • theKGB65

    theKGB65

    24 Aralık 2007