Maaari ba tayong gumamit ng hashmap sa multithreaded na kapaligiran?

Maaari ba tayong gumamit ng hashmap sa multithreaded na kapaligiran?
Maaari ba tayong gumamit ng hashmap sa multithreaded na kapaligiran?
Anonim

Ano ang mali sa paggamit ng HashMap sa multithreaded na kapaligiran? … Ito ay isang problema kung maraming mga thread ang nagdaragdag sa parehong halimbawa ng HashMap nang hindi ito ay na-synchronize. Kahit na 1 thread lang ang nagbabago ng HashMap at nagbabasa ang ibang mga thread mula sa parehong mapa na iyon nang walang pag-synchronize, magkakaroon ka ng mga problema.

Maaari ka bang gumamit ng HashMap sa isang multithreaded na kapaligiran?

Dapat mong tiyakin: Ang lahat ng mga pag-update sa HashMap ay nakumpleto bago ang mga thread ay na-instantiate at ang thread na lumilikha ng mapa ay nag-fork din sa mga thread. Ginagamit lang ng mga thread ang HashMap sa read-only mode – maaaring makuha o umulit nang hindi inaalis. Walang mga thread na nag-a-update sa mapa.

Bakit hindi dapat gamitin ang HashMap sa multithreaded na kapaligiran maaari ba itong magdulot din ng infinite loop?

Ang default na kapasidad ng HashMap ay 16 at Load factor ay 0.75, ibig sabihin, doblehin ng HashMap ang kapasidad nito kapag pumasok sa mapa ang ika-12 Key-Value na pares (160.75=12). Kapag sinubukan ng 2 thread na i-access ang HashMap nang sabay, maaari kang makatagpo ng infinite loop. Sinusubukan ng Thread 1 at Thread 2 na ilagay ang ika-12 key-value pair.

Nakukuha ba ng HashMap ang thread na ligtas?

HashMap ay hindi naka-synchronize. Hindi ito ligtas sa thread at hindi maibabahagi sa pagitan ng maraming thread nang walang wastong code sa pag-synchronize samantalang naka-synchronize ang Hashtable.

Ano ang pinakaangkop sa multithreadedkapaligiran?

Ang sagot ay "ConcurrentHashMap"

Inirerekumendang: