შეგვიძლია გამოვიყენოთ ჰეშმაპი მრავალძაფის გარემოში?

Სარჩევი:

შეგვიძლია გამოვიყენოთ ჰეშმაპი მრავალძაფის გარემოში?
შეგვიძლია გამოვიყენოთ ჰეშმაპი მრავალძაფის გარემოში?
Anonim

რა არის არასწორი HashMap-ის გამოყენება მრავალძალიან გარემოში? … პრობლემაა, თუ რამდენიმე თემა ემატება HashMap-ის ერთსა და იმავე ინსტანციასმისი სინქრონიზაციის გარეშე. მაშინაც კი, თუ მხოლოდ 1 თემა ცვლის HashMap-ს და სხვა ძაფები კითხულობენ იმავე რუკიდან სინქრონიზაციის გარეშე, პრობლემები შეგექმნებათ.

შეგიძლიათ გამოიყენოთ HashMap მრავალძალიან გარემოში?

თქვენ უნდა დარწმუნდეთ: HashMap-ის ყველა განახლება დასრულებულია ძაფების ინსტალაციამდე და თემა, რომელიც ქმნის რუკას, ასევე არღვევს ძაფებს. ძაფები იყენებენ მხოლოდ HashMap-ს მხოლოდ წაკითხვის რეჟიმში - მიღება ან გამეორება წაშლის გარეშე. რუკის განახლების თემა არ არის.

რატომ არ უნდა იქნას გამოყენებული HashMap მრავალძალიან გარემოში, შეიძლება მან გამოიწვიოს უსასრულო მარყუჟიც?

HashMap-ის ნაგულისხმევი ტევადობა არის 16, ხოლო ჩატვირთვის ფაქტორი არის 0.75, რაც ნიშნავს, რომ HashMap გააორმაგებს მის მოცულობას, როდესაც მე-12 Key-Value წყვილი შევა რუკაში (160.75=12). როდესაც 2 თემა ერთდროულად ცდილობს HashMap-ზე წვდომას, მაშინ შეიძლება შეგხვდეთ უსასრულო მარყუჟი. თემა 1 და თემა 2 ცდილობს დააყენოს მე-12 გასაღები-მნიშვნელობის წყვილი.

უსაფრთხოა თუ არა HashMap მისაღებად თემა?

HashMap არ არის სინქრონიზებული. ეს არ არის ნაკადისთვის უსაფრთხო და არ შეიძლება გაზიაროთ ბევრ თემას შორის შესაბამისი სინქრონიზაციის კოდის გარეშე, მაშინ როცა Hashtable სინქრონიზებულია.

რა არის საუკეთესოდ შეეფერება მრავალძაფიანსგარემო?

პასუხია "ConcurrentHashMap"

გირჩევთ: