In diesem Beitrag: Can we use Synchronized for each entry instead of ConcurrentHashMap?Locking Wert Objekte eines ConcurrentHashMap
ich gefragt, ob wir Synchronized Block verwenden können nur Einträge einer HashMap zu sperren, die ich gelernt, können wir nicht. Nun, meine Frage ist, wenn ich eine ConcurrentHashMap (nicht hashMap) mit Werten vom Typ ArrayList oder TreeMap habe, kann ich diesen Ansatz (mit synchronisiert) verwenden. Hier, was ich meine:
ConcurrentHashMap<String, ArrayList<String>> map = new ConcurrentHashMap<>();
synchronized (map.get("key")) {
//do something with the array thread-safely,
}
Ist es sicher? Der Grund, warum ich frage, ist, dass ich nicht weiß, wie man diese Art von Problemen durch Testen prüft.
_Ist es sicher? _ Ist nicht zu verantworten, es sei denn, wir wissen, was Sie sonst noch mit den Werten machen könnten. Ist ein anderer Teil Ihres Codes separat verwendet? Verriegeln sie sich vor dem Zugriff auf den entsprechenden Monitor? –
Sie haben Recht. Ich meine, ist es thread-sicher, wenn wann immer ich auf die Arraylist zugreifen möchte, benutze synchronisierten Block? –