Használhatjuk a hashmapot többszálú környezetben?

Használhatjuk a hashmapot többszálú környezetben?
Használhatjuk a hashmapot többszálú környezetben?
Anonim

Mi a baj a HashMap használatával többszálú környezetben? … Problémát jelent, ha több szál is hozzáadódik ugyanahhoz a HashMap-példányhoz anélkül, hogy szinkronizálva lenne. Még ha csak 1 szál módosít egy HashMap-et, és más szálak ugyanarról a térképről olvasnak szinkronizálás nélkül, akkor is problémákba ütközhet.

Használhat HashMap-et többszálú környezetben?

Győződjön meg arról, hogy: A HashMap összes frissítése befejeződött, mielőtt a szálak példányosodnának, és a térképet létrehozó szál is elágazná a szálakat. A szálak csak a HashMap-et használják csak olvasható módban – vagy get vagy iterációt eltávolítás nélkül. Nincsenek a térképet frissítő szálak.

Miért nem szabad a HashMap-et használni többszálú környezetben, az is okozhat végtelen ciklust?

A HashMap alapértelmezett kapacitása 16, a terhelési tényező pedig 0,75, ami azt jelenti, hogy a HashMap megduplázza kapacitását, amikor a 12. kulcs-érték pár belép a térképbe (160,75=12). Amikor 2 szál egyszerre próbál hozzáférni a HashMaphez, akkor végtelen ciklusba ütközhet. Az 1. szál és a 2. szál megpróbálja beállítani a 12. kulcs-érték párt.

Biztonságos a HashMap szál?

A HashMap nincs szinkronizálva. Nem szálbiztos, és nem osztható meg sok szál között megfelelő szinkronizálási kód nélkül, míg a Hashtable szinkronizált.

Mi a legalkalmasabb a többszálúhozkörnyezet?

A válasz: "ConcurrentHashMap"

Ajánlott: