Bagaimana Cara Terbaik Menerapkan Peta Hash Bersamaan di Jawa?



Artikel ini akan memperkenalkan Anda pada konsep yang disebut Concurrent Hash Map In Java dan menindaklanjutinya dengan demonstrasi praktis

Artikel ini akan memperkenalkan Anda pada sebuah konsep yang disebut Concurrent Hash Map In dan menindaklanjutinya dengan demonstrasi praktis. Petunjuk berikut akan dibahas dalam artikel ini,

Pindah dengan artikel ini di Concurrent Hash Map in Java





Bagaimana ConcurrentHashMap bekerja secara internal?

Mulai Java 5 dan seterusnya, ConcurrentHashMap diperkenalkan sebagai alternatif untuk HashTable. Kita juga bisa mendapatkan peta Synchronized menggunakan metode kelas utilitas yang disebut synchronizedMap () tetapi ada kekurangan dari metode ini yaitu kinerja yang sangat buruk karena hanya satu utas yang dapat mengaksesnya pada satu waktu. Jadi ConcurrentHashMap mengatasi masalah ini.



Pindah dengan artikel ini di Concurrent Hash Map in Java

Mengapa Peta lain?

Meskipun kita sudah memiliki HashMap, HashTable lalu apa yang dibutuhkan dari ConcurrentHashMap, itu karena ia memberikan kinerja yang lebih baik pada saat yang sama juga aman untuk thread.

Pindah dengan artikel ini di Concurrent Hash Map in Java



Apa bedanya?

Ini juga didasarkan pada hashing tetapi kinerjanya ditingkatkan dengan strategi pengunciannya. Tidak seperti HashTable atau Synchronized HashMap, ia tidak menerapkan kunci yang sama pada setiap metode, ia menggunakan kunci terpisah untuk setiap metode, Ia menggunakan kunci peserta ulang untuk tujuan ini. Mirip dengan HashMap, ConcurrentHashMap memiliki 16 bucket yaitu segmen, untuk membuat ConcurrentHashMap dengan lebih dari 16 bucket, ia memiliki konstruktor berbeda.

Sebelum berbicara secara detail mari kita ulas beberapa konsep di bawah ini:

ConcurrentHashMap: Peta ini memungkinkan akses utas secara bersamaan. Hanya bagian dari peta yang disebut segmen yaitu struktur data yang mendasari dikunci saat menambahkan atau memperbarui peta. Ini memungkinkan akses utas bersamaan untuk membaca data tanpa mengunci. Itu diperkenalkan untuk meningkatkan kinerja.

  • Concurrency-Level: Ini adalah angka yang merupakan perkiraan jumlah utas yang diperbarui secara bersamaan.
  • Load-Factor: Ini adalah nilai yang digunakan untuk mengontrol faktor pengubahan ukuran.
  • Kapasitas Awal: Ini adalah properti yang membuat Peta dengan ukuran yang disediakan.

Mari kita lihat diagram di bawah ini dan coba pahami cara kerja ConcurrentHashMap.

parsing ganda ke int java

Gambar- Hashmap Bersamaan- Edureka

Jadi dalam diagram di atas, kami memiliki 16 kunci yang mengunci hanya sebagian dari peta yang diperlukan sehingga metode lain dapat diakses oleh utas yang berbeda sehingga meningkatkan kinerja.

Mirip dengan HashMap, ConcurrentHashMap bekerja dengan cara yang sama, ia berisi 16 segmen secara default dan menyimpan elemen dengan hashing, jadi jika elemen memiliki hash yang sama, mereka disimpan pada segmen yang sama seperti yang ditunjukkan pada diagram di atas dengan bantuan daftar tertaut.

Pindah dengan artikel ini di Concurrent Hash Map in Java

Perbedaan antara ConcurrentHashMap dan HashMap

HashMap adalah milik Koleksi sementara ConcurrentHashMap milik Koleksi Bersamaan namun ada banyak perbedaan lain di antara keduanya.

  • ConcurrentHashMap adalahAman untuk benangdisinkronkan tetapi HashMap tidak disinkronkan.
  • ConcurrentHashMap memiliki kinerja yang rendah karena disinkronkan karena terkadang utas harus menunggu tetapi HashMap memiliki kinerja tinggi karena tidak disinkronkan dan utas apa pun dapat mengaksesnya secara bersamaan.
  • Kita akan mendapatkan ConcurrentModificationException jika dua utas secara bersamaan mencoba mengubah atau menambahkan konten Object. Namun, dalam kasus ConcurrentHashMap, kami tidak akan mendapatkan pengecualian saat melakukan operasi yang sama.

  • Nilai nol diizinkan untuk kunci dan nilai di HashMap. Namun, ConcurrentHashMap tidak mengizinkan nilai nol untuk kunci dan nilai yang dicoba untuk menambahkan nilai nol. Kami akan mendapatkan pengecualian, yaitu NullPointerException.

  • HashMap diperkenalkan di JDK 1.2 sedangkan ConcurrentHashMap diperkenalkan di JDK 1.5.

Seperti yang telah kita lihat sebelumnya untuk kinerja yang lebih baik, ini terdiri dari larik node sebagai keranjang tabel yang sebelumnya merupakan segmen tabel Jawa 8 .

Bucket diinisialisasi dengan lambat saat penyisipan pertama dilakukan. Setiap bucket dapat dikunci secara terpisah dengan mengunci node pertama dari bucket juga membaca operasi tidak memblokir.

Dibandingkan dengan HashMap, ConcurrentHashMap memberikan ekstra concurrencyLevel argumen untuk mengontrol jumlah perkiraan utas yang akan digunakan.

Konstruktor:

  1. ConcurrentHashMap m = baru ConcurrentHashMap ()

    Peta kosong baru dibuat dengan kapasitas awal default 16, faktor beban 0,75 dan level konkurensi 16.

  2. ConcurrentHashMap m = baru ConcurrentHashMap (int initialCapacity)
    Peta kosong baru dibuat dengan kapasitas awal yang ditentukan, faktor beban 0,75 dan level konkurensi 16.

    hubungan antara java dan javascript
  3. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor)

    Peta kosong baru dibuat dengan kapasitas awal dan faktor beban yang ditentukan dengan level konkurensi 16.

    c ++ apa itu namespace
  4. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Peta kosong baru dibuat dengan kapasitas awal, faktor beban, dan tingkat konkurensi yang ditentukan.

  5. ConcurrentHashMap m = baru ConcurrentHashMap (Peta m)
    Membuat ConcurrentHashMap baru dari peta yang disediakan.

Dua argumen lainnya: initialCapacity dan loadFactor bekerja sama dengan HashMap.
ConcurrentMap adalah memori yang konsisten pada operasi kunci / nilai dalam lingkungan multi-thread.

Pindah dengan artikel ini di Concurrent Hash Map in Java

Jebakan

Saat mengambil objek, ConcurrentHashMap tidak diblokir dan mungkin tumpang tindih dengan operasi pembaruan, sehingga untuk kinerja yang lebih baik, mereka hanya mengambil operasi pembaruan yang baru saja selesai.

Hasil metode status agregat termasuk size, isEmpty, dan containsValue biasanya hanya berguna jika peta tidak mengalami pembaruan serentak di utas lain.

Jika pembaruan bersamaan dikontrol dengan benar, metode status ini dapat diandalkan.

Meskipun metode ini tidak menjamin secara real-time.

Kapasitas tabel default adalah 16 namun kita dapat mengubahnya menggunakan level konkurensi.

public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

Jika kunci kunci diperlukan untuk diurutkan, kita dapat menggunakan ConcurrentSkipListMap.

Sekarang setelah menjalankan program di atas, Anda akan memahami Peta Hash Bersamaan di Jawa. Jadi kami telah mengakhiri artikel ini di Jika Anda ingin mempelajari lebih lanjut, lihat , perusahaan pembelajaran online tepercaya. Kursus pelatihan dan sertifikasi Java J2EE dan SOA Edureka dirancang untuk melatih Anda baik konsep inti dan lanjutan Java bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar artikel ini dan kami akan menghubungi Anda kembali sesegera mungkin.