cari

Rumah  >  Soal Jawab  >  teks badan

java - HashMap中在项目中不用锁,使用什么方法可以把他改造成线程安全的?

在java中,Hashmap是线程不安全的,通过锁的机制和粒度,在源码中提供了HashTable和ConcurrentHashMap两种数据结构供使用,但是如果不使用锁,有什么方法将HashMap做到再业务中是线程安全的呢?

==========================================================================

我有一种思路是这样的:首先有一个map,再使用它的时候,将他赋值给一个新的map,我们叫他map',然后再将该map'做为key,存成一个新map。新map为Map<map',value>,这样每次添加的时候,是基于map'来添加的?

各路大神,还有没有其他思路呢?大家一起来讨论讨论哈。

PHPzPHPz2766 hari yang lalu529

membalas semua(6)saya akan balas

  • PHP中文网

    PHP中文网2017-04-18 09:50:14

    Kaedah yang disebut oleh poster ialah CopyOnWrite Idea utama adalah untuk mencipta salinan semasa operasi, tetapi anda boleh merujuk kepada JDK's, sebenarnya, ia juga dikunci semasa CopyOnWriteArrayList operasi. Apabila melintasi Apabila menggunakan salinan, tidak perlu mengunci operasi kerana jika ia tidak dikunci, ia akan menjadi sakit kepala untuk menggabungkan data akhir (maksudnya anda mesti mengunci apabila set)merge

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 09:50:14

    Data yang dikongsi tidak boleh selamat untuk benang tanpa kunci. Langkah penyalinan kaedah anda adalah benang-tidak selamat.
    Untuk memastikan benang selamat, sama ada jangan kongsi atau gunakan kunci

    balas
    0
  • 迷茫

    迷茫2017-04-18 09:50:14

    Setiap kali anda mengendalikan salinan, bagaimana anda boleh memastikan bahawa semua utas kelihatan selepas setiap pemprosesan Dan jika anda menambahkannya berdasarkan peta', ia mungkin menyebabkan masalah transaksi pangkalan data, seperti tidak membaca semula, A thread menambah Selepas? mengemas kini peta, utas B ditimpa dengan peta baharu'; jika keterlihatan utas tidak perlu dijamin, gunakan ThreadLocal untuk penyetempatan berubah.

    balas
    0
  • 黄舟

    黄舟2017-04-18 09:50:14

    Collections.synchronizedMap(Map)
    boleh dikapsulkan sebagai thread-safe

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:50:14

    Keselamatan benang tidak boleh dicapai tanpa menggunakan kunci. Ia hanya bergantung pada tahap lanjutan kunci anda.
    HashTable Kerana semua operasi kunci objek akan disegerakkan, ini adalah aplikasi paling asas.
    Kunci ConcurrentHashMap agak maju, kerana ia melaksanakan fungsi seperti partition secara dalaman dan menyimpan kunci yang berbeza di kawasan yang berbeza Pelaksanaan ini membenarkan berbilang benang untuk mengendalikan ConcurrentHashMap pada masa yang sama, tetapi operasi pada kawasan yang sama masih boleh hanya. Operasi berulir tunggal (kunci).

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:50:14

    Collections.synchronizedMap......?

    balas
    0
  • Batalbalas