java - HashMap中在项目中不用锁,使用什么方法可以把他改造成线程安全的?
PHPz
PHPz 2017-04-18 09:48:14
0
6
497

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

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

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

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

PHPz
PHPz

学习是最好的投资!

membalas semua(6)
Ty80

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

刘奇

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

迷茫

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.

黄舟

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

伊谢尔伦

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).

大家讲道理

Collections.synchronizedMap......?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!