Mehr als zwei Threads synchronisieren

L

learner

Gast
Hi,

sorry für die dämliche Frage, aber ich glaube ich bin grad wirklich zu blöd dazu:
Ich finde im Netz immer nur Beispiele für die Synchronisation von zwei Threads. Ich habe allerdings mehrere Threads, die auf das gleiche Objekt zugreifen.

Ausgangspunkt ist eine HashMap<String, HashMap>.
Der String ist eine ID, damit ich auf die verschachtelte Unter-HashMap zugreifen kann. Jeder Thread besitzt eine eigene ID und soll jeweils auf seine eigene HashMap zurückgreifen und dort seine berechneten Daten einspeichern. Rufe ich nun von jedem Thread eine Funktion auf, die die "obere" HashMap auslesen soll, kommt es u.U. dazu, dass die eine oder andere verschachtelte HashMap null ist. Das würde ich nun gerne synchroniseren.

Aber wie mache ich das?

Aufgebaut sind meine Threads so:

Java:
class calculate extends Thread {
    @Override
    public void run() {
        ... //Berechne und greife auf die HashMap zu
    }
}
 

javimka

Top Contributor
Wenn du willst, dass immer nur ein Thread auf ein Objekt zugreifen können soll, musst du synchronized verwenden:
Java:
synchronized(hashMap) {
  hashMap.get(...);
}
 
T

TmS8yS

Gast
Hi, dankeschön für deine Antwort.
Wo bring ich das denn aber unter? Zudem: Ich lese die HashMap ja nicht nur, sondern schreibe auch hinein. Ich möchte erreichen, dass alle anderen Threads nicht auf die HashMap zugreifen, bis der arbeitende Thread gelesen und geschrieben hat.
 
S

SlaterB

Gast
du musst es überall unterbringen, wo auf die Map zugegriffen wird,
oder eine
neueMap = Collections.synchronizedMap(alteMap)
verwenden

was spielt es übrigens für eine Rolle, ob 2 oder n Threads?
wie sehen denn die dir bekannten Beispiele für 2 Threads aus, wenn nicht auch mit synchronized?
was läßt dich vermuten, dass es bei 3 Threads anders ist
 
L

learner

Gast
Danke.
Aber das habe ich jetzt auch mal gemacht, leider bringt es nicht viel:

Java:
HashMap<String, HashMap> hm = new HashMap<String, HashMap>;

class calculate extends Thread {
    public int nr;

    @Override
    public void run() {
        ...
        synchronized(hm) {
            HashMap tmp = hm.get(String.valueOf(nr));
        }
        ...   //tmp bearbeiten
        synchronized(hm) {
            hm.put(String.valueOf(nr), tmp);
        }

        showHashMaps();    //Funktion mit einer For-Schleife, die dann alle 'Unter'-Hashmaps anzeigen soll

    }
}

...
for (int i = 0; i < 10; i++) {
    calculate c = new calculate();
    c.nr = i;
    c.start();
}

Was mache ich falsch? Wenn ich die HashMap ausgebe, ist dort immer nur eine 'Unter'-HashMap enthalten.
 

javimka

Top Contributor
Wieso fügst du tmp wieder hinzu? Wenn du das mit get raus holst, aber nicht löschst, ist das nicht nötig, weil tmp immer noch im hm enthalten bleibt.

Ich sehe nicht so ganz, wo das Problem liegt, ist es ein Thread-Problem? Vielleicht musst du während der Bearbeitung von tmp auch noch tmp synchronisieren.

Bist du sicher, dass man das nicht auch mit einer Datenstruktur lösen könnte, die nicht HashMaps von HashMaps verwendet?
 
S

SlaterB

Gast
jeder Thread ist sein eigenes Objekt, da pfuschen die anderen doch nicht rein,
Synchronisation ist in dem Fall auch nicht nötig,

-----

du brauchst ein Objekt, auf welches alle zugreifen, z.B.
Controller c = ..;
thread1 = new Thread(c);
thread2 = new Thread(c);
thread3 = new Thread(c);
-> alle merken sich und benutzen c

dann wieder mit Synchronisation,

Klassen groß schreiben!
 
L

learner

Gast
Wieso fügst du tmp wieder hinzu? Wenn du das mit get raus holst, aber nicht löschst, ist das nicht nötig, weil tmp immer noch im hm enthalten bleibt.

Ehrlich, so blöd wie ich kann man doch nicht sein... Es ist wirklich kein Thread-Problem, sondern lag schlicht und einfach daran, dass ich das übersehen habe... bzw. ging ich davon aus, dass ich den Inhalt und keine Referenz bekomme (das ist doch wirklich bei jeder Sprache anders). Irgendwo hatte ich dann nämlich noch ein tmp.clear(); drin und folglich hat der auch den entsprechenden Teil aus der HashMap gelöscht.

Thread kann geschlossen oder am besten gelöscht werden ;)

Danke für eure Hilfe!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Regexproblem - Wie kann ich zwei oder mehr beliebige Zeichen matchen? Java Basics - Anfänger-Themen 7
H Beim Vergleich/Sortieren mehr als zwei Objekte berücksichtigen Java Basics - Anfänger-Themen 14
M differieren zwei int werte um mehr als 9% ? Java Basics - Anfänger-Themen 4
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
celta_vigo Programmieranfänger braucht Rat zu mehr Praxisnähe Java Basics - Anfänger-Themen 8
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
berserkerdq2 Warum ist das keine Referenzkopie mehr? Java Basics - Anfänger-Themen 26
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Eclipse kennt keine String Klasse mehr Java Basics - Anfänger-Themen 1
C Was machen mit nicht mehr verwendeten Instanzen ? Java Basics - Anfänger-Themen 18
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
H Vier Augen sehen mehr... Java Basics - Anfänger-Themen 6
C Exportierte JAR öffnet zweiten Frame nicht mehr Java Basics - Anfänger-Themen 7
P Ich komme nicht mehr weiter bei so einer einfachen Sache... Java Basics - Anfänger-Themen 18
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
L Mehr Verschlüsselungen Java Basics - Anfänger-Themen 3
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
S Warum kann ich nicht mehr als eine Variable in einer for Schleife deklarieren ? Java Basics - Anfänger-Themen 1
L Compiler-Fehler AndroidStudio Projekt startet nicht mehr!!! Java Basics - Anfänger-Themen 2
I Programm von mir - keine Ahnung mehr ob richtig falsch:-( Java Basics - Anfänger-Themen 6
kilopack15 Mehr Nachkommastellen mit double Java Basics - Anfänger-Themen 14
U Klassen IntelliJ14.1.1 Ultimate startet eine Main-Klasse NICHT MEHR Java Basics - Anfänger-Themen 0
MrSnake Subimages mehr Speicherplatz als Original? Java Basics - Anfänger-Themen 2
T Methoden Nach der Schleife funktioniert nichts mehr Java Basics - Anfänger-Themen 7
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
J Eine Art verkettete Liste aber mit teils mehr als einem Nachfolger Java Basics - Anfänger-Themen 8
D Erste Schritte Canvas verschwinden nicht mehr Java Basics - Anfänger-Themen 2
N Methode die mehr als ein Wert zurückgibt Java Basics - Anfänger-Themen 3
M .jar nicht mehr ausführbar. Java Basics - Anfänger-Themen 5
Z Fürge nur ein JTextField ein und danach wird nichts mehr angezeigt Java Basics - Anfänger-Themen 3
D MouseListener funktioniert nach Timerstart nicht mehr Java Basics - Anfänger-Themen 9
M Bekomm altes Uni-Projekt in java nicht mehr zum laufen Java Basics - Anfänger-Themen 7
H Empfohlene Projekt-Struktur und mehr ... Java Basics - Anfänger-Themen 5
S GUI kann im WindowBuilder nicht mehr (größer kleiner ziehen) Java Basics - Anfänger-Themen 2
O OOP Methoden bei erstellen einer Instanz und mehr Java Basics - Anfänger-Themen 4
J Java Writer funktioniert nicht mehr Java Basics - Anfänger-Themen 8
T Wenn Schaltjahr ist, soll Februar, einen Tag mehr haben, GUI mit combobox Java Basics - Anfänger-Themen 4
J Formen plötzlich nicht mehr aufrufbar! Java Basics - Anfänger-Themen 8
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
B Nichts geht mehr Java Basics - Anfänger-Themen 10
S MVC mit mehr als nur je einer Klasse? Java Basics - Anfänger-Themen 1
M Eclipse startet nicht mehr (eclipse.exe beendet sich selbst)? Java Basics - Anfänger-Themen 5
M Class nach Namensänderung nicht mehr vorhanden Java Basics - Anfänger-Themen 6
S Listener reagieren nicht mehr Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
Z Java Compiler will nicht mehr Java Basics - Anfänger-Themen 3
K Compiler-Fehler Programme funktionieren nicht mehr Java Basics - Anfänger-Themen 5
H Privat ist nicht mehr private Java Basics - Anfänger-Themen 7
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
C Variable funktioniert plötzlich nicht mehr? Java Basics - Anfänger-Themen 4
V Kann kein Java Projekt mehr mit Eclipse erstellen Java Basics - Anfänger-Themen 5
E Fehlermeldung und Fenster wird nicht mehr angezeigt Java Basics - Anfänger-Themen 12
P Classpath jdbc-Treiber kann nach export in jar-File nicht mehr geladen werden Java Basics - Anfänger-Themen 2
M Mutiple markers werden in Eclipse nicht mehr angezeigt Java Basics - Anfänger-Themen 2
T Compiler-Fehler Eclipse reagiert nicht mehr auf Änderungen im Code Java Basics - Anfänger-Themen 2
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4
F Erste Schritte JCreator arbeitet nicht mehr als Eingabeaufforderung. Warum? Java Basics - Anfänger-Themen 5
C Versandmarkendruck bei der DP funktioniert nicht mehr Java Basics - Anfänger-Themen 3
P Laenge von mehr dimensionalen arrays Java Basics - Anfänger-Themen 2
F Warum werden nicht mehr Programme in Java geschrieben? Java Basics - Anfänger-Themen 27
K Action Listener reagiert nicht auf Button druck mehr??? Java Basics - Anfänger-Themen 4
T Programm läuft nicht mehr... Java Basics - Anfänger-Themen 3
G Scrollbares Fenster bei mehr als 5 Objekten Java Basics - Anfänger-Themen 4
B Interface Nach "package"-Nennung keine Toolbar-Icons mehr Java Basics - Anfänger-Themen 5
I ComboBox mit Icons + Mehr...! Java Basics - Anfänger-Themen 6
F Ich kenn mich nicht mehr aus - 'java.lang.NoSuchMethodError: main' in Applet? Java Basics - Anfänger-Themen 2
F Spiel geht nicht mehr nach neuer Klasse Sound Java Basics - Anfänger-Themen 18
O Einlesen einer "config.ini" funktioniert plötzlich nicht mehr ! Java Basics - Anfänger-Themen 10
G Immer mehr Threads beim Selbstaufruf der main-Methode Java Basics - Anfänger-Themen 3
P Java Anwendung mit mehr RAM starten?? Java Basics - Anfänger-Themen 5
N Kann keine Java-Programme mehr schreiben Java Basics - Anfänger-Themen 10
H ObjectOutputStream - mehr als nur ein Objekt ausgeben Java Basics - Anfänger-Themen 2
I Datenbank - nach erster Verbindung keine Verbindung mehr Java Basics - Anfänger-Themen 3
L JPanel vergrößern bis JScrollPane nicht mehr zu sehen Java Basics - Anfänger-Themen 7
C DecimalFormat-Patern funktioniert ab 11 Stellen nicht mehr Java Basics - Anfänger-Themen 3
V Warten bis die Länge eines Strings nicht mehr 0 ist Java Basics - Anfänger-Themen 13
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
Haave EAN-13-Prüfziffer: Vermeiden von Eingaben mit mehr/weniger als 12 Ziffern Java Basics - Anfänger-Themen 3
D brauch hillfe komm nicht mehr weiter... Java Basics - Anfänger-Themen 10
G methodenvorschläge bei Punktnotation kommen nicht mehr !! (Eclipse) Java Basics - Anfänger-Themen 5
B Objekt wird nicht mehr gezeichnet Java Basics - Anfänger-Themen 2
M MouseListener funktioniert in jar-file nicht mehr Java Basics - Anfänger-Themen 13
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
Q mehr Leistung durch Threads Java Basics - Anfänger-Themen 4
N mehr Dimensionalen Array beschreiben Java Basics - Anfänger-Themen 13
X Robot geht nicht mehr (Ubuntu 9.10) Java Basics - Anfänger-Themen 2
S Mein Computer kennt "javac" und "java" nicht mehr! Java Basics - Anfänger-Themen 6
C Bild wird nicht mehr gefunden Java Basics - Anfänger-Themen 2
T repaint wir nicht mehr geöffnet! Java Basics - Anfänger-Themen 38
V Programm Lädt nicht mehr . Java Basics - Anfänger-Themen 7
R Jar Datei läuft auf neuem Rechner nicht mehr Java Basics - Anfänger-Themen 15
R Mehr-Dimensionale ArrayList o.Ä. Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben