I einen multithreaded Java-Code haben, in denen:Synchronisation auf der lokalen Variablen
- mehrere Threads Stateful-Objekte aus dem synchronisierten gemeinsam genutzten Speicher zu lesen (das heißt als ein Ergebnis hiervon können einige Fäden die gleichen Objekte verweisen);
- jeder Thread ruft dann eine Methode
process()
auf und übergibt dort sein Objekt; process()
verarbeitet Objekte in irgendeiner Weise, was zu einer Änderung des Objektstatus führen kann;- Diese Statusänderungen sollten synchronisiert werden.
ich eine Methode, wie das erstellt haben:
public void process(Foo[] foos) {
for (final Foo foo : foos) {
if (foo.needsProcessing()) {
synchronized (foo) {
foo.process(); // foo's state may be changed here
}
}
}
}
Nach bestem Wissen und Gewissen, das sieht echt. IntelliJs Inspektion beschwert sich jedoch über die Synchronisierung der lokalen Variablen, da "verschiedene Threads sehr wahrscheinlich unterschiedliche lokale Instanzen haben" (dies ist nicht gültig für mich, da ich nicht initialisiere foos in der Methode).
Im Wesentlichen, was ich hier erreichen möchte, ist das gleiche wie Methode Foo.process() synchronisiert zu haben (was keine Option für mich ist, da Foo ein Teil der 3rd Party Library ist).
Ich habe mich an den Code ohne gelbe Markierungen gewöhnt, so dass jeder Rat von der Gemeinschaft geschätzt wird. Ist das wirklich so schlimm, um Synchronisation bei Einheimischen zu machen? Gibt es eine Alternative, die in meiner Situation funktionieren wird?
Vielen Dank im Voraus!
Richtig, danke! BTW, was denkst du über die Hauptfrage hier? Ist das wirklich so schlecht, um auf Einheimische zu synchronisieren? –