Ich habe eine synchronisierte Karte (via Collections.synchronizedMap()
), die durch Gewinde A. Thema B gelesen und aktualisiert greift auf die Karte nur über Map.keySet()
(read-only).Wie wird die Map zwischen einem r/w-Thread und einem schreibgeschützten Thread synchronisiert?
Wie soll ich diese synchronisieren? Die docs say dass keySet() (für eine Collections.synchronizedMap) "nicht in synchronisierten Block sein muss". Ich kann den Lese-/Schreibzugriff von Thread A innerhalb eines synchronisierten Blocks setzen, aber ist das überhaupt notwendig?
Ich denke, es seltsam, mir scheint sogar eine synchronisierte Karte zu verwenden, oder einen synchronisierten Block, wenn Map.keySet muss nicht synchronisiert werden (nach dem docs Link oben) ...
Update: Ich habe verpasst, dass die Iteration des Schlüsselsatzes synchronisiert werden muss, obwohl das Abrufen des Schlüsselsatzes keine Synchronisierung erfordert. Nicht besonders aufregend, den keySet zu haben, ohne durchschauen zu können, also Endergebnis = Synchronisation erforderlich. Verwenden Sie stattdessen eine ConcurrentHashMap.
ist das über Java3D? –
@ tuğrulbüyükışık nein. Allgemeine Java-Parallelitätsfrage – ericsoco