Java’da ConcurrentHashMap’e Giriş

Java Developer Tutorials

EşzamanlıHashMap bir alt sınıfıdır HashMap ve çok iş parçacıklı ortamlarda kullanılmak üzere tasarlanmıştır. Yapılandırılabilir bir eşzamanlılık seviyesini korur (varsayılan değeri 16), harita oluşturulurken belirtilebilir. Eşzamanlılık düzeyi ne kadar yüksek olursa, kovalarına aynı anda o kadar fazla iş parçacığı erişebilir, ancak bu, tümü daha fazla çekişmeye neden olabilir. getEnumerators() uygun şekilde senkronize edilmez. Bu Java programlama öğreticisi, EşzamanlıHashMap Java’da uygun olan yerlerde kod örnekleriyle.

Karma hakkında daha fazla bilgi edinmek için eğiticimize göz atın: Java’da Hashing’e Giriş.

Java’da ConcurrentHashMap Nedir?

Java’da, bir EşzamanlıHashMap verileri eşzamanlı olarak depolamak ve almak için kullanılan bir veri yapısıdır. Bu veri yapısı, birden çok iş parçacığının aynı anda karma haritaya okuma ve yazma yaptığı çok iş parçacıklı uygulamalarda kullanılmak üzere tasarlanmıştır.

EşzamanlıHashMap birden çok iş parçacığının haritaya aynı anda erişmesini sağlayan bir Java sınıfıdır. Bu bir parçasıdır Java Koleksiyonları Çerçevesive uygulamaların eş zamanlı harita güncellemelerini verimli bir şekilde işlemesi için bir yol sağlar.

bu EşzamanlıHashMap class, haritaya değerler koymak ve haritadan değerler almak gibi, harita üzerinde temel işlemleri yapmak için çeşitli yöntemler sağlar. Ayrıca sınıf, haritadaki anahtar/değer çiftleri üzerinde yineleme yapmak veya belirli bir değerle ilişkili bir dizi anahtar almak gibi daha gelişmiş işlemler yapmak için çeşitli yöntemler sağlar.

Geliştiriciler Neden ConcurrentHashMap Kullanmalı?

bu EşzamanlıHashMap Java geliştiricilerinin eşzamanlı verilerle güvenli ve verimli bir şekilde çalışmasını sağlayan güçlü bir veri yapısıdır. bu EşzamanlıHashMap Eşzamanlı verilerle çalışmayı uygun hale getiren bir dizi özellik sunar:

  • atomik işlemler: Üzerindeki tüm işlemler EşzamanlıHashMap atomiktir, bu da eşzamanlı veri erişimini güvenle gerçekleştirebileceğiniz anlamına gelir.
  • Kilitsiz: EşzamanlıHashMap kilitsiz olacak şekilde tasarlanmıştır, yani veri okumak veya yazmak için bir kilit edinmeye gerek yoktur. Bu EşzamanlıHashMap çok iş parçacıklı bir ortamda kullanıldığında çok verimlidir.
  • ölçeklenebilir: EşzamanlıHashMap ölçeklenebilir olacak şekilde tasarlanmıştır, bu da büyük miktarda veriyi verimli bir şekilde işleyebileceği anlamına gelir.

Okumak: Uzaktaki Geliştiriciler için En İyi Araçlar

ConcurrentHashMap Java’da Nasıl Çalışır?

EşzamanlıHashMap veriler üzerinde hızlı, iş parçacığı güvenli işlemler sağlayan güçlü bir veri yapısıdır. Harita, diğer iş parçacıklarının karışması konusunda endişelenmenize gerek kalmadan, her bir iş parçacığının verilere güvenli bir şekilde erişmesine ve bunları değiştirmesine izin vererek çalışır. Bu, aynı anda yalnızca bir iş parçacığının verilere erişmesine izin veren özel bir kilitleme mekanizması kullanılarak gerçekleştirilir.

Bu kilitleme mekanizmasına denir parçalı kilit. Verileri küçük parçalara bölerek ve ardından her bir iş parçacığının bir seferde bir parçayı kilitlemesine izin vererek çalışır. Bu şekilde, birden çok iş parçacığı aynı anda veriler üzerinde çalışabilir, ancak asla aynı veriler üzerinde aynı anda çalışmayacaktır.

Bölünmüş kilit, adı verilen özel bir Java sınıfı kullanılarak uygulanır. ReentrantLock. ReentrantLock iş parçacıklarının veri yapılarını güvenli bir şekilde kilitlemesini sağlayan güçlü bir senkronizasyon aracıdır. Dahil olmak üzere birçok Java sınıfı tarafından kullanılır. EşzamanlıHashMap.

bu ReentrantLock sınıfın iki ana yöntemi vardır: kilit() ve Kilidini aç(). Bir iş parçacığı çağırdığında kilit(), veri yapısı için kilidi almaya çalışacaktır. Kilit mevcutsa, iş parçacığı onu alır ve ardından verilere güvenli bir şekilde erişebilir ve bunları değiştirebilir.

Bir kilidin yokluğunda, iş parçacığı başka bir iş parçacığı onu serbest bırakana kadar bekler. İplik kilidi aldıktan sonra, kritik bölüm kodunu çalıştırabilir ve ardından onu arayarak serbest bırakabilir. Kilidini aç() yöntem.

bu ReentrantLock sınıfı da var deneKilit() bir iş parçacığının beklemeden kilidi almaya çalışmasına izin veren yöntem. Bu, kilit mevcut değilse diğer konuları engellemek istemediğiniz durumlarda faydalı olabilir.

Java’da ConcurrentHashMap Nasıl Programlanır

bu EşzamanlıHashMap sınıf şuradan uzanır HashMap sınıf ve eşzamanlı erişimi desteklemek için uygulanır. Aynı zamanda iş parçacığı için güvenlidir, yani birden çok iş parçacığı herhangi bir sorun olmadan erişebilir. Oluşturmak için EşzamanlıHashMapaşağıdaki Java kodunu yazabilirsiniz:

ConcurrentHashMap concurrentHashMap = new ConcurrentHashMap();  

Aşağıdaki kod listesi, öğeleri bir EşzamanlıHashMap ve ardından bunları konsol penceresinde görüntüleyin:

import java.util.concurrent.*;
class MyConcurrentHashMap {
 public static void main(String[] args)
    {
        ConcurrentHashMap<String, String> concurrentHashMap
            = new ConcurrentHashMap<>();
 
        concurrentHashMap.put("P001", "Lenovo Legion");
        concurrentHashMap.put("P002", "DELL Inspiron");
        concurrentHashMap.put("P003", "Lenovo ThinkPad");
        System.out.println(concurrentHashMap);
    }
}

Java’da ConcurrentHashMap Ne Zaman Kullanılır?

Aynı anda birden fazla iş parçacığı bir veri yapısına eriştiğinde, bu öngörülemeyen sonuçlara ve hatta kilitlenmelere yol açabilir. Bu, kendi sürümünüzü uygulayacaksanız, kilitler veya semaforlar gibi senkronizasyon temel öğelerini kullanarak bunun iş parçacığı açısından güvenli olduğundan emin olmanız gerektiği anlamına gelir.

EşzamanlıHashMap hızlı arama ve ekleme süreleri sunduğundan, yüksek performanslı uygulamalar için mükemmel bir seçimdir. Tek tek kovaları kilitleme ve kilidini açma ve ayrıca elementleri atomik olarak ekleme ve çıkarma yeteneği de dahil olmak üzere, bu tür ortamlar için çok uygun olmasını sağlayan çeşitli özellikler sunar.

Temel olarak, kullanıldığında engellemeyen eşzamanlı bir haritaya ihtiyacınız olduğunda kullanmalısınız. Örneğin, çok sayıda iş parçacığı güvenli veriyle çalışıyorsanız veya haritaya birden çok iş parçacığından erişmeniz gerekiyorsa, EşzamanlıHashMap iyi bir seçenektir. Aynı zamanda, büyük miktarda veri depolamanız gerekiyorsa ve birden çok iş parçacığından erişilebilir olmasını istiyorsanız, bu iyi bir seçimdir.

bu EşzamanlıHashMap veri okumak veya yazmak için birden çok iş parçacığı tarafından erişilmek üzere tasarlanmıştır. Tüm nesneyi kilitlemeden birden çok iş parçacığından ona erişebilirsiniz, böylece bir iş parçacığı programınızın başka bir bölümünü kilitlediğinde ona erişmek için beklemek zorunda kalmazsınız.

EşzamanlıHashMap ayrıca atomu destekler putIfAbsent() ve almak() yeni veri eklemek veya mevcut verileri herhangi bir kilitlenme olmadan sırasıyla haritadan almak için mevcutsa yalnızca o öğeyi kilitlemenize izin veren işlemler, diğer iş parçacıkları bu işlemleri bu haritadaki başka bir girişte zaten çalıştırıyorsa.

Hashtable veya senkronize koleksiyon kullanırken, okuma ve yazma sırasında tüm koleksiyon kilitlenir. Birlikte EşzamanlıHashMap, yalnızca gerekli öğe okuma veya yazma için kilitlenir. Bu, daha iyi performans sağlar çünkü birden fazla iş parçacığı aynı anda verileri okuyabilir.

Haritadaki öğelere sıralı erişime ihtiyacınız varsa kullanmayın. Eşzamanlı bir harita, bir öğenin başka bir öğe değiştirildikten hemen sonra kullanılabilir olacağını garanti etmez; zaman içinde herhangi bir zaman noktasında farklı kısımlarını değiştiren başka iplikler olabilir, bu, değişikliklerden sonra garantili bir sipariş olmadığı anlamına gelir.

Okumak: En İyi DevOps ve DevSecOps Araçları

Java’da ConcurrentHashMap vs HashMap

Her şeyden önce, EşzamanlıHashMap sınıf, eşzamanlı veri erişiminde kullanılmak üzere tasarlanmıştır, oysa Hashtable sınıf değildir. Bunun anlamı şudur: EşzamanlıHashMap class, veri bozulması veya yarış koşulları riski olmadan aynı anda birden fazla iş parçacığı tarafından güvenle kullanılabilir.

İkincisi, EşzamanlıHashMap sınıfından çok daha verimlidir. Hashtable sınıf. Verileri depolamak ve almak için karma tabanlı bir algoritma kullanır, bu da onu daha hızlı ve daha ölçeklenebilir hale getirir. Son olarak, EşzamanlıHashMap sınıfında bulunmayan bir dizi güçlü özellik sunar. Hashtable sınıf. Bunlar, girişleri kilitleme, tahliye etme ve yineleme ve haritadan giriş ekleme ve kaldırma desteğini içerir.

Kullanmanın mantıklı olduğu birkaç farklı senaryo vardır. EşzamanlıHashMap normalden fazla HashMap. Yaygın bir senaryo, aynı anda birden çok okuyucuyu ve yazarı desteklemeniz gerektiğidir. Bu, örneğin birden fazla kullanıcının aynı anda verilere eriştiği bir web uygulamasında durum olabilir.

İçinde bulunduğu başka bir senaryo EşzamanlıHashMap sık okuma ve seyrek yazma işlemleri gerçekleştirmeniz gerektiğinde yararlıdır. Bu durumda, bir kullanmak daha verimli olabilir. EşzamanlıHashMap çünkü yazmalar okumaları engellemez.

EşzamanlıHashMap yüksek performanslı, çok iş parçacıklı uygulamalar için idealdir. Birden çok diziden bir haritaya erişmeniz ve güncellemeniz gerekiyorsa, EşzamanlıHashMap en iyi seçenektir. Bir sistemin tüm işlemlerini sağlar. HashMap ve ayrıca okuma, yazma ve güncelleme için eşzamanlı erişime izin verir.

Java’da ConcurrentHashMap vs Hashtable

EşzamanlıHashMap birden fazla kilit kullanır, böylece haritanın farklı bölümleri birbirini engellemeden aynı anda güncellenebilir. Hashtable, diğer yandan, tüm harita için tek bir kilit kullanır ve bu da performans sorunlarına yol açabilir. Ancak, aksine Hashtableerişim EşzamanlıHashMap bir kilit mevcut olmadığında genellikle bloke edilmez. Bu, bir bilgisayardan veri almada çok daha yüksek eşzamanlılık sağlar. EşzamanlıHashMap.

Bir güncelleme yaparken EşzamanlıHashMap, birden çok iş parçacığı, güncellemeler için haritanın farklı bölümlerini kilitleyebilir. Kilit sayısı, oluşturma sırasında yapılandırılabilir ve gerekirse ayarlanabilir.

Haritanın bir bölümünün kilitlenmesi, yalnızca diğer iş parçacıklarının kilitli bölümü güncellemesini engeller; diğer konuların haritanın kilitli olmayan diğer bölümlerini okumasını engellemez. aksine Hashtableboş anahtarlara ve değerlere izin verilmez EşzamanlıHashMap.

Java’da ConcurrentHashMap ne zaman kullanılmamalı

EşzamanlıHashMap öğelerin ekleme sırasını korumanız gerekiyorsa, bu iyi bir seçim değildir. Bunun nedeni, bir kişinin iç yapısının EşzamanlıHashMap hash kodlarına dayanır; bu, öğelerin eklendiği sıranın korunmadığı anlamına gelir.

Kullanmanın ideal olmadığı başka bir durum EşzamanlıHashMap tüm haritaya erişimi senkronize etmeniz gerektiği zamandır. Bunun nedeni, haritanın her bir parçasının bağımsız olarak kilitlenmesidir, bu nedenle tüm haritanın kilitlenmesi, her bir parçanın ayrı ayrı kilitlenmesini gerektirecek ve bu da verimsiz olacaktır.

Java’da ConcurrentHashMap Üzerine Son Düşünceler

EşzamanlıHashMap birden çok iş parçacığının eş zamanlı olarak haritaya erişmesine izin veren bir Java sınıfıdır. Java Collections Framework’ün bir parçasıdır ve uygulamaların haritadaki eşzamanlı güncellemeleri verimli bir şekilde işlemesi için bir yol sağlar. EşzamanlıHashMap gelenekselden farklıdır HashMap bir kerede yalnızca bir iş parçacığının haritayı değiştirebilmesini sağlamak için bir kilit kullanır. Bu, veri bozulmasını ve yarış koşullarını önler.

EşzamanlıHashMap uzantısıdır Harita Aynı anda birden fazla girişi tutabilen arayüz. yararlanabilirsiniz EşzamanlıHashMap önemli bir süre boyunca okuyucuları veya yazarları kilitlemeden anahtar koleksiyonunda ve değerlerde eşzamanlı güncellemeler yapmak. temel özellikleri EşzamanlıHashMap şunlardır: eşzamanlı programlama için kritik olan performans, ölçeklenebilirlik ve iş parçacığı güvenliği.

Devamını oku Java programlama ve yazılım geliştirme eğitimleri.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.