Ich habe Code gesehen, wo Leute StringBuffer die meiste Zeit verwendet haben, nur um Probleme mit mehreren Threads zu vermeiden, aber ich bin nicht in der Lage, zu einem allgemeinen Fall zu kommen, wo StringBuffer erforderlich ist .Verwenden von StringBuilder in Multithreading-Umgebung
Wenn ich eine Methode, wie unten haben - private String getPath(){ return new StringBuilder("a").append("b").toString(); }
Obwohl diese Methode von mehreren Threads verwendet werden, sollte es okay sein. (?) Weil wir einen neuen Stringbuilder erstellen und jeder Thread eine eigene Kopie auf dem Stack (Referenz) hat.
Nur wenn wir einen StringBuilder als Methode Argument bekommen, wird es ein Problem sein.
Was meinen Sie mit "Obwohl diese Methode von mehreren Threads verwendet wird, sollte es in Ordnung sein."? Das Hauptproblem beim Multithreading (wenn keine Sperren implementiert sind) ist die Kohärenz von gemeinsam genutzten Daten. Wenn Sie eine Zeichenfolge zwischen mehreren Threads teilen und einige von ihnen in diese schreiben können, kann jeder Thread einen anderen Zeichenfolgenwert lesen. Wenn Sie von der Funktion jedes Mal einen neuen (konstanten Wert) String erstellen, gibt es kein solches Problem, aber Sie könnten genauso gut einen konstanten String-Wert zurückgeben. Ich nehme an, Sie beabsichtigen, den Wert einer Variablen zurückzugeben, richtig? –
Nehmen Sie oben Fall (Beispiel), hier wird jeder Thread getPath() -Methode aufrufen, die jedes Mal einen neuen StringBuilder instanziiert und eine Zeichenfolge (die unveränderlich ist) zurückgibt. Also, muss ich StringBuffer in diesem Fall verwenden? – Ouney
Ich glaube, Sie tun nicht –