Concurrency access auf eine Map

Status
Nicht offen für weitere Antworten.

soe

Mitglied
Hi all,

ich habe eine - wahrscheinlich - simple Frage.
In einer Webanwendung wird im Backend auf eine Map zugegriffen. Nun möchte ich das parallel noch ein Quartz Job läuft, der diese Map aufräumt.
z.B. so
Java:
for (Map.Entry<Comparable, User> entry : this.map.entrySet()) {
            final User user = entry.getValue();
            if (user != null) {
                if (isIrgendWasWahr()) {
                    tueIrgendWas(user);
                    this.map.remove(entry.getKey());
                }
            } else {
                this.map.remove(entry.getKey());
            }
        }
Parallel werden aber neue User der Map hinzugefügt. Kommt es jetzt zu Problemen, weil der Job abgelaufene User löscht und ein register ggf. neue User in die Map schreibt ?

Danke für die Hilfe.

Gruß Sven
 

Der Müde Joe

Top Contributor
Collections.synchronizedMap(Map)

und natürlich bei Iterationene

synchronize(synchMap) { for(....) {} }

EDIT
eventuell auch die

ConcurrentHashMap.
wobei ich deren verhalten grad nicht genau kenne.
 

soe

Mitglied
Hi Joe,

Danke für Deine Antwort.
OK, das synchronize habe ich "hoffentlich" verstanden. Ich habs mal um den eigentlichen Methodeninhalt herumgebaut.
Java:
public void meineMethode() {

synchronize(this.map) {
        for (Map.Entry<Comparable, User> entry : this.map.entrySet()) {
            final User user = entry.getValue();
            if (user != null) {
                if (isIrgendWasWahr()) {
                    tueIrgendWas(user);
                    this.map.remove(entry.getKey());
                }
            } else {
                this.map.remove(entry.getKey());
            }
        }
}

}

Bleibet für mich noch die Frage, wird die Map jetzt durch das synchronize für Schreibzugriffe blockiert, d.h. wenn jetzt jemand einen neuen User in die Map schreiben will, während der Job einen rauslöscht ?

Das mit "Collections.synchronizedMap(Map)" hab ich noch nicht ganz verstanden inwieweit mir das helfen könnte. An welcher Stelle ? - DOCH hab ich verstadnen :) - sry.
Die Map ist eine ConcurrentHashMap.

Danke

Gruß Sven
 
Zuletzt bearbeitet:

Der Müde Joe

Top Contributor
Hab da was falsch verstanden. synch ist nicht nötig. Das Problem ist, dass du über eine collection iterierst und dabei diese Collection verändern willst. --> böse.

Benutze eine Kopie für sowas:
Java:
// synchronisiert alle zugriffe:
static Map<String, String> synchMap = Collections.synchronizedMap(new HashMap<String, String> ());

public static void main(String[] args) {
	synchMap.put("string", "value");
	synchMap.put("string1", "value");
	synchMap.put("string2", "value");
	synchMap.put("string3", "value");
	// Kopie des Entry Sets:
	Set<Entry<String, String>> entrySetCopy = new HashSet<Entry<String,String>>(synchMap.entrySet());
	for(Entry<String, String> entry : entrySetCopy) {
		//work with original:
		synchMap.remove(entry.getKey());
	}
	System.out.println(synchMap.size());
}
 

soe

Mitglied
Hi Joe,

Es handelt sich um eine ConcurrentHashMap, d.h. wenn ich das richtig verstanden habe ist auf dieser eine Gleichzeitigkeit von Schreib/Lese-Zugriffen möglich. In definiertem Umfang. Richtig ?

Gruß Sven
 
T

tuxedo

Gast
Wenn du dir von der Map einen Interator holst und diesen zum iterieren benutz und währenddessen auch noch Einträge in der Map löschst dann knallts trotzdem. Wie schon erwähnt wurde: Eine Kopie anlegen und damit arbeiten.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Verstaendnisfragen zu Concurrency Allgemeine Java-Themen 3
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
P Concurrency Frage Allgemeine Java-Themen 8
Kr0e Java, Concurrency und Synchronisierung Allgemeine Java-Themen 4
G multithreading, concurrency conveyor belt beispiel Allgemeine Java-Themen 2
O Multithreading mit Java 5 u den Concurrency APIs Allgemeine Java-Themen 7
J WARNING: An illegal reflective access operation has occurred, beim Compilieren von JasperReports, was bedeutet das ? Allgemeine Java-Themen 23
Bluedaishi Access violation error Allgemeine Java-Themen 2
T Frage zu Access Modifiers Allgemeine Java-Themen 6
E To count password and username access possibility Allgemeine Java-Themen 10
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
B Load Library and use JNA to access Allgemeine Java-Themen 3
S Access Restrictions in Eclipse auf Code beschraenken (und nicht fuer Comments) Allgemeine Java-Themen 2
J Access restriction Allgemeine Java-Themen 5
C Klassen Warning "synthetic access" bei innerer Klasse Allgemeine Java-Themen 15
T access$800 Allgemeine Java-Themen 8
J Nice Office Access und Mac Allgemeine Java-Themen 6
M Access Frontend als Webanwendung Allgemeine Java-Themen 8
S Innere Klassen und die statische Methode access$x Allgemeine Java-Themen 5
B Access-Befehle werden in der falschen Reiehnfolge ausgeführt Allgemeine Java-Themen 4
timomeinen Access Modifier vor Kompilierung ändern Allgemeine Java-Themen 9
P access denied / policy problem Allgemeine Java-Themen 4
W Daten in Access einfügen über Java Allgemeine Java-Themen 21
M Stärkerer access-modifier als "private"? Allgemeine Java-Themen 17
H Applet - java.security.AccessControlException: access. Allgemeine Java-Themen 6
D Mit Java Daten aus Access holen und als VCard versenden Allgemeine Java-Themen 3
W Sonderzeichen in Access 97 schreiben Allgemeine Java-Themen 2
J MS Access mit Java ansprechen Allgemeine Java-Themen 3
T Word, Excel u. Access API Allgemeine Java-Themen 2
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
J MS Access-Reports steuerung mit Java Allgemeine Java-Themen 6
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
C access control list in java Allgemeine Java-Themen 7
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben