Neden olduğunu GÖRDÜM bu şekilde tasarlanmış yaptırıyor?
ConcurrentHashMap hakkında komple cam kaynak kodunu okudum.
Ama aşağıdaki kodu kafamı karıştırdı:
public boolean isEmpty() {
final Segment<K,V>[] segments = this.segments;
...
}
Benim sorum:
"Bu.bölümleri" ilan etti
final Segment<K,V>[] segments;
Yani, burada, bu yöntemin başlangıçta, aynı tip, aynı bellek için referans noktası ilan edildi.
Neden yazar böyle mi yazdın? Neden bu değildi.kesimleri doğrudan? Bir nedeni var mı?
CEVAP
Bu bir deyim kilidi serbest kod için tipik volatile değişkenleri içeren. İlk satırında volatile bir kez okumak ve çalışmak. Bu arada başka bir iş parçacığı volatile güncelleme olabilir ama sadece başlangıçta okuma değeri ilgilendi.
Ayrıca, hatta ne zaman üye değişkeni söz konusu değildir uçucu ama son, bu deyim ilgisi var İŞLEMCİ önbelleğe Okuma bir yığın konumu daha fazla önbellek dostu daha okuyarak rastgele bir yığın yer. Ayrıca yerel bir kayıt var CPU bağlı olacak daha yüksek bir şans var.
Bu ikinci durumda JİT derleyici genellikle bu endişeleri ilgilenecek beri aslında bazı tartışmalar var, ama Doug Lea genel prensip beraber gelen adamlardan biri.

Yükleme't bulmak Android SDK yok ...
Bir kendisine dahil ederse, ne olduÄŸun...
Sihirli bir numara, ne olduÄŸunu ve ned...
Neden bu dize uzunluÄŸu daha fazla kara...
AngularJS : ng-bind daha iyi olduÄŸunu ...