Ist die forEach-Methode von ConcurrentHashMap threadsicher? [Duplikat]
Wenn Sie alle Elemente in ConcurrentHashMap durchlaufen möchten, ist die forEach
Methode threadsicher?
Antworten
Es kommt darauf an, was Sie unter threadsicher verstehen.
- Wenn Sie damit einverstanden sind, dass andere Threads die Karte während eines
forEach
Anrufs ändern können , ist dies threadsicher. - Wenn Sie möchten, dass die Map während des Vorgangs nicht geändert werden kann,
forEach
sodass andere Threads blockiert werden oder Fehler auftreten, wenn sie versuchen, sie zu ändern, ist dies nicht der Fall .
In der API-Dokumentation heißt es:
Obwohl alle Vorgänge threadsicher sind, beinhalten Abrufvorgänge keine Sperrung, und es gibt keine Unterstützung dafür, die gesamte Tabelle so zu sperren, dass jeglicher Zugriff verhindert wird.
...
In ähnlicher Weise geben Iteratoren, Spliteratoren und Aufzählungen Elemente zurück, die den Status der Hash-Tabelle zu einem bestimmten Zeitpunkt oder seit der Erstellung des Iterators / der Aufzählung widerspiegeln. Sie werfen nicht
ConcurrentModificationException
... Beachten Sie, dass die Ergebnisse von Aggregatstatusmethoden ... normalerweise nur dann nützlich sind, wenn eine Karte in anderen Threads nicht gleichzeitig aktualisiert wird. Andernfalls spiegeln die Ergebnisse dieser Verfahren Übergangszustände wider, die für Überwachungs- oder Schätzzwecke geeignet sein können, jedoch nicht für die Programmsteuerung.