Rumah  >  Soal Jawab  >  teks badan

java - Apakah senario penggunaan perniagaan khusus kelas berprestasi tinggi seperti ConcurrentHashMap?

Mengikut soalan, apakah senario penggunaan perniagaan khusus kelas berprestasi tinggi seperti ConcurrentHashMap?

HashMap biasanya paling kerap digunakan apabila kami menulis kod, dan kami sudah terbiasa dengannya

Tetapi terdapat Peta berprestasi tinggi lain di Jawa, dan saya rasa seperti biasanya saya tidak menggunakannya

Selepas mencari di Baidu, saya hanya nampak perbezaan antara HashMap dan ConcurrentHashMap

Tetapi saya tidak tahu senario penggunaan perniagaan tertentu yang akan menggunakan kelas ini

Jadi saya rasa sedikit keliru, harap senior dapat memberi tunjuk ajar kepada saya, terima kasih

给我你的怀抱给我你的怀抱2670 hari yang lalu1168

membalas semua(4)saya akan balas

  • 某草草

    某草草2017-06-28 09:25:10

    ConcurrentHashMap ialah kelas alat di bawah pakej java.util.concurrent untuk mengelakkan concurrency. Untuk kegunaan perniagaan, kelas concurrency anda sendiri juga boleh melaksanakan ThreadLocal. . .

    Terutama digunakan dalam berbilang benang versi terdahulu menggunakan blok penyegerakan yang disegerakkan, yang tidak mudah untuk menyelesaikan masalah seperti mengunci dan melepaskan. Sekarang semuanya ditulis secara rasmi dalam Java, lihat sahaja pada multi-threading. . .

    Sebagai contoh, dalam senario perniagaan, maklumat kakitangan syarikat disimpan dalam pangkalan data berbilang benang. Jika anda menggunakan java.util.List, data dalam setiap rangkaian akan menjadi tidak konsisten kelas. Perkara utama yang perlu diambil perhatian ialah apabila membaca data, ia tidak penting. . .

    balas
    0
  • 欧阳克

    欧阳克2017-06-28 09:25:10

    ConcurrentHashMap direka khas untuk akses oleh berbilang rangkaian. Contohnya:

    // 在线用户管理类
    public class UserManager {
        private Map<String, User> userMap = new ConcurrentHashMap<>();
        
        // 当用户登入时调用
        public void onUserSignIn(String sessionId, User user) {
            this.userMap.put(sessionId, user);
        }
        
        // 当用户登出或超时时调用
        public void onUserSignOut(String sessionId) {
            this.userMap.remove(sessionId);
        }
        
        public getUser(String sessionId) {
            return this.userMap.get(sessionId);
        }
    }

    Apabila terdapat ramai pengguna log masuk dan keluar pada masa yang sama, onUserSignIn()onUserSignOut() akan ada banyak benang yang memanggil pada masa yang sama.

    balas
    0
  • 黄舟

    黄舟2017-06-28 09:25:10

    Terima kasih atas jemputan.

    Anda kena tahu dahulu:

    • Melakukan operasi pada objek yang tidak dilindungi dalam berbilang urutan akan mengakibatkan status tidak konsisten untuk semua orang.

    • Anda boleh membuka beberapa utas untuk meletakkan dan mengalih keluar peta cincang biasa, dengan syarat ia berada dalam keadaan tertentu, seperti elemen di dalamnya memenuhi keperluan tertentu, lebih besar daripada atau sama dengan nombor tertentu, dsb.

    • ConcurrentHashMap ialah peta serentak yang disediakan dalam pakej konkurensi jdk, yang boleh menghalang ketidakkonsistenan salinan objek apabila berbilang benang mengendalikan objek.

    Anda boleh mencari adegan itu di Baidu.

    balas
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:25:10

    Perbezaannya anda sepatutnya sudah tahu.

    Untuk memastikan keselamatan benang, kami biasanya menggunakan kata kunci Synchronize Dengan ConcurrentHashMap, anda tidak perlu lagi menggunakan kaedah Synchronize yang menyusahkan Selain itu, ConcurrentHashMap biasanya digunakan dalam situasi berbilang benang Baca lebih lanjut dan kurangkan situasi. Tidak semua multi-thread boleh menggunakan kelas alat konkurensi ini.

    balas
    0
  • Batalbalas