Hi!
Ich habe eine Klasse (nennen wir sie mal "Speicher") in welcher mehrere Objekte einer anderen Klasse mitsamt id in einer HashMap gespeichert und auch wieder rausgelöscht werden. Die Daten müssen nicht in der Reihenfolge gelöscht werden, wie sie gespeichert wurden. D. h. ich hab meinetwegen die ids
1
2
3
4
5
6
7
vergeben und lösche dann einige (1, 3, 6) raus, dass dann die ids
2
4
5
7
bestehen bleiben. Jetzt kommt wieder eine Klasse hinzu, mein Programm überprüft welche kleinstmögliche id (damit ich wenigstens ein wenig Ordnung hab ) nicht vergeben ist, stellt fest dass es sich um die 1 handelt und speichert die Klasse mitsamt id in der Hashmap. Folglich sind dann das
1
2
4
5
7
die Vergebenen IDs. Soweit kein Problem. Nur greifen u.U. mehrere Threads auf das selbe Objekt der Klasse Speicher zu und wollen Daten hinzufügen => 1. Thread schaut nach, sieht dass die 3 frei ist, aber bevor er die 3 zuweisen kann, schaut der 2. Thread auch nach welche id frei ist und stellt natürlich auch die 3 fest. Das hat dann freilich zur Folge, dass das 1. Objekt in der Hashmap mit dem 2. gleich wieder überschrieben wird => nicht gut ...
Da ich damit noch überhaupt keine Erfahrung gemacht habe, hätte ich da mal zwei Fragen:
1. Läuft das wirklich so ab, wie ich mir das Denke oder mache ich mir ganz umsonst Gedanken?
2. Falls ja, wie kann ich das Problem umgehen?
Danke für die Antworten!
Ich habe eine Klasse (nennen wir sie mal "Speicher") in welcher mehrere Objekte einer anderen Klasse mitsamt id in einer HashMap gespeichert und auch wieder rausgelöscht werden. Die Daten müssen nicht in der Reihenfolge gelöscht werden, wie sie gespeichert wurden. D. h. ich hab meinetwegen die ids
1
2
3
4
5
6
7
vergeben und lösche dann einige (1, 3, 6) raus, dass dann die ids
2
4
5
7
bestehen bleiben. Jetzt kommt wieder eine Klasse hinzu, mein Programm überprüft welche kleinstmögliche id (damit ich wenigstens ein wenig Ordnung hab ) nicht vergeben ist, stellt fest dass es sich um die 1 handelt und speichert die Klasse mitsamt id in der Hashmap. Folglich sind dann das
1
2
4
5
7
die Vergebenen IDs. Soweit kein Problem. Nur greifen u.U. mehrere Threads auf das selbe Objekt der Klasse Speicher zu und wollen Daten hinzufügen => 1. Thread schaut nach, sieht dass die 3 frei ist, aber bevor er die 3 zuweisen kann, schaut der 2. Thread auch nach welche id frei ist und stellt natürlich auch die 3 fest. Das hat dann freilich zur Folge, dass das 1. Objekt in der Hashmap mit dem 2. gleich wieder überschrieben wird => nicht gut ...
Da ich damit noch überhaupt keine Erfahrung gemacht habe, hätte ich da mal zwei Fragen:
1. Läuft das wirklich so ab, wie ich mir das Denke oder mache ich mir ganz umsonst Gedanken?
2. Falls ja, wie kann ich das Problem umgehen?
Danke für die Antworten!