Ich habe Java Concurrency in Practice gelesen und bin mit dieser Frage: Wenn ich eine ConcurrentHashMap verwenden, welche Daten Nebenläufigkeit Probleme in Teil eins des Buches diskutiert muss ich mich noch Sorgen machen? Hier ein paar Beispiele von einem meiner Programme sind:Verwendung von ConcurrentHashMap beseitigt Datensichtbarkeitsprobleme?
1. Aktuelle Position eines Händlers (eine gemeinsame Ganzzahl, wobei ‚integer‘ ist der mathematische Begriff)
Diese Zahl stellt dar, was ein trader
Objekt zur Zeit besitzt und definiert seinen Zustand. Es muss seine Position lesen, um zu wissen, was zu tun ist (schauen Sie, um eine neue Position zu beginnen oder die aktuelle zu verwalten). Trader
Methoden laufen auf ihrem eigenen Thread.
Ein broker
Objekt ist für die Einstellung der Position trader
zuständig. Es wird die Position jedes Mal festlegen, wenn eine Order des Händlers gefüllt ist. Methoden laufen auf ihrem eigenen Thread.
Sowohl trader
als auch broker
sind im selben Paket enthalten. Die Position ist als Paket-Privat static ConcurrentHashMap
implementiert. Die Schlüssel sind IDs der Händlerobjekte. Die Werte sind Ganzzahl.
Extern zum Paket ist die Anwendung. Es bringt die Positionen der Händler indirekt mit einem öffentlichen Getter zusammen.
Positionen ändern sich höchstens alle paar Minuten, so dass die broker
die Karte nicht oft berührt. Die trader
und Anwendung wird jedoch häufig gelesen. Außerdem haben wir oft mehrere Händler, die die Karte gleichzeitig lesen.
Also eine ConcurrentHashMap auf diese Weise verwenden, muss ich nicht über Sperren und Datensichtbarkeit arbeiten? Die ConcurrentHashMap kümmert sich um alles?
2. Der Markt (bid, fragt, zuletzt Preise)
So ziemlich die gleiche Situation wie Position, außer jetzt die broker
wird sehr häufig die Preise aktualisieren (bis zu 10 aktualisiert eine Sekunde während der stark frequentierten Zeiten (normalerweise ein paar Mal pro Sekunde). Das trader
und die Anwendung führen weiterhin häufig Lesevorgänge durch. Die Kartenschlüssel sind jetzt Codes, die angeben, welche Aktie oder Zukunft, und die Werte sind Objekte, die die Marktpreise halten.
Es scheint in Ordnung zu arbeiten, aber nachdem ich JCIP gelesen habe, merke ich, dass das Programm immer noch kaputt sein kann, wenn die Dinge nicht korrekt implementiert sind. Das Buch spricht über die ConcurrentHashMap, sagt mir aber nicht explizit, welche Probleme aus Teil I wir nicht mehr manuell lösen müssen. Es erscheint , dass ich in diesem Fall nichts synchronize
haben muss. Ist das korrekt?
Ich würde Sie ermutigen, Ihre Frage neu zu formulieren. Dies setzt voraus, dass jeder das Buch gelesen hat. Dies begrenzt die Anzahl der Antworten, die Sie erhalten. – Davidann