Diziyi nasıl uçucu hale getiririm? Çünkü anlamaya başladığım gibi, bir dizi uçucu hale getirmek güvensiz mi? Bir dizi uçucu bildirmek, alanlarına uçucu erişim sağlama VERMEZ.Java uçucu dizisi?
cevap
referansın kendisini uçucu olduğunu beyan ediyorsun, unsurlar değil. Başka bir deyişle, uçucu elemanlar kümesini değil, uçucu bir dizi unsurunu açıklıyorsunuz demektir. Burada çözüm, tamsayı kullanmak istediğinizde AtomicIntegerArray kullanmaktır. bir başka yolu (ama biraz çirkin) bir alanı düzenleme diziye referansı her defasında yeniden yazmak olduğunu
yapmanız (i ... dedi çirkin olarak)
arr = arr;
tarafından AtomicLongArray, AtomicIntegerArray, AtomicReferenceArray (java.util.concurrent.atomic). Java'daki nesneler
DÜZENLEME: dizileri. Bu nesneyi referansı uçucu hale getirirseniz, diziye referansı değiştirirseniz bunu diğer iş parçacıklarına görünür hale getirir. Bununla birlikte, bu, dizi değerlerinin kendileri için geçerli değildir.
Java bellek modelinin daha iyi bir şekilde ayarlanması, aslında Atomic * Array olmadan etrafta gezinme olasılığı vardır. Uçucu için oldu-öncesi ilişkiyi kullanarak okur ve normal yazma mümkün kılar: iplik A bazı uçucu olmayan malzeme ve iplik B uçucu şeyler değişiklikleri görmek için garanti edilir, sonra uçucu değişken yazar
eğer aynı zamanda, ancak sadece iplik B, önce uçucu değişkenini okursa. ayrıca bkz: diziler için Happens-before relationships with volatile fields and synchronized blocks in Java - and their impact on non-volatile variables?
, bu şu anlama gelir: Eğer dizisine yazmasını sonra , bazı uçucu durum değişkeni yazma (yazma aslında uçucu durum değişkeni değiştirir emin olun!) Eğer diziden okuduğunuzda , önce değişken durum değişkenini okuyun ve ardından diziye erişin. Uçucu okuma, tüm diğer yazıları da, daha önce olduğu sürece görünür yapmalıdır. Özgün başvuru arr=arr
yazımı aslında yardımcı olmaz.
arr[i]
alanının değeri değil, arr
dizisinin adresini yazarsınız. Yani arr[i]
(hangisini istediğiniz) için hiçbir geçici özellik kazanmıyorsunuz, ancak sadece arr
depolama adresi için.
Jeremy Manson önce belirtilen blog gönderisi ayrıntılı olarak açıklamaktadır: http://jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html
Onun iyi çözüm Atom * Diziler, jenerik türleri için yani AtomicReferenceArray (aynı zamanda temel türleri için özel formlar mevcut orada) kullanmaktır. Bu özellikle, özellikle size ihtiyacınız olan daha fazla özellik kazandığı için (atomiklik >> uçucu), özellikle verimli olduğunu düşünemiyorum.
Bir alternatif, konteynerlerin uçucu işaretçi alanları kullandığı işaretlenmiş yapılar olabilir. Ayrıca bu verimli değil ...
- 1. Java nesne dizisi boyutu
- 2. Kotlin'in uçucu özellikleri?
- 3. Uçucu aslında nasıl çalışır?
- 4. Uçucu Yapı Anlamları
- 5. java dizisi iş parçacığı güvenliği
- 6. Takas Nesnesi Dizisi Üyeleri Java
- 7. Haritadaki değer olarak java dizisi
- 8. C, atlama başlangıç statik dizisi
- 9. Java Listesinden bir SQL dizisi nasıl oluşturulur?
- 10. Dize ile karakter dizisi alın - Java
- 11. JAVA Trivia Game Kapsam dışı dizisi
- 12. Java 8 Filtre Dizisi Lambda Kullanılıyor
- 13. java sort dize dizisi kurbish karakterlerine göre
- 14. Java için int dizisi nasıl döndürülür JNI
- 15. Ben aynı tip uçucu nesneye bir nesne atamak istediğiniz bir uçucu nesneye
- 16. Uçucu değişken, javada statik olarak tanımlanabilir mi?
- 17. nvidia-smi Uçucu GPU-kullanma açıklaması?
- 18. C++ uçucu nesne, kalıcı üye söz konusu
- 19. Scala içinde uçucu olmayan üst sınır
- 20. uçucu olarak ilan edilemez, bu hak ?: olduğunu
- 21. Scala uçucu türleri: @uncheckedStable güvenli olmayan nedir?
- 22. Dizisi
- 23. dizisi
- 24. Dizisi
- 25. Dizisi
- 26. Dizisi
- 27. Dizgiye göre karakter dizisi dizisi
- 28. Oluşturucu imzasının java dizisi içerdiği 'getConstructor' nasıl yapılır?
- 29. Bir çeşit Java/Scala görüntüsüne bayt dizisi. Performansla ilgili düşünceler
- 30. Bir Java dosyasını bir tembel Clojure dizisi olarak yüzdürmek
http: //jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html –