Angenommen, ich habe eine Singleton-Klasse (jede Klasse kann die Instanz erhalten):Java Concurrency: Shared Memory zwischen Threads
class data
{
Color sun = "WHITE";
String luminance = "HIGH";
int age = 25;
double speed = 52.5
...
}
nehme ich mehrere Threads haben, die einen Verweis auf die Singleton Instanz dieser Klasse zu bekommen. Ich versuche, einen Weg zu finden, gets/sets auf einer PER FIELD Basis zu synchronisieren.
Wenn ich eine synchronisierte Getter/Setter-Methode für jede Variable habe, dann "sperrt" dies die ganze Klasse (anstelle des einzelnen Feldes), bis diese Methode gesetzt ist.
Gibt es eine Möglichkeit, dass diese Threads nur Instanzwerte sperren, anstatt die gesamte Klasse zu sperren?
- BEARBEITEN: Ich entschuldige mich für die riesigen Daten eines Objekts.
Daten werden tatsächlich in mehreren Klassen gespeichert. Höchstens jedes Objekt hat nur 20-25 Mitglieder.
Ich denke, mein Kopf wird explodieren. Können Sie nicht einfach die Wandlungsfähigkeit reduzieren? Z.B. * entfernen * die Notwendigkeit zu sperren-riesig-monolithisch-icky-Objekt. –
Mein Gesicht hat abgeschwächt darüber nachzudenken. – MattC
Haben Sie festgestellt, dass es einen Flaschenhals gibt, wenn Sie ein Schloss teilen? Beachten Sie, dass Sie ein Objekt in etwa 2 ms 1000 Mal über mehrere Threads hinweg sperren können. Bevor Sie Ihre Bewerbung noch kompilierter machen, haben Sie diesen Engpass gemessen oder schätzen Sie? –