Sto costruendo una stringa di più parti e voglio usare StringBuffer
o StringBuilder
per farlo. Dalle Java 5 documenti, vedo che StringBuilder
è preferito quando possibile, con l'avvertenza cheJava StringBuilder e sicurezza thread
istanze di
StringBuilder
non sono sicure per i più thread.
Da questa affermazione, ho capito che non dovevo avere un unico StringBuilder
istanza condivisa da più thread. Ma per quanto riguarda questo caso:
//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
return new StringBuilder(a).append(b).toString();
}
Qui ci potrebbero essere più filettature in funzione contemporaneamente, utilizzando la classe StringBuilder
allo stesso tempo (ad esempio, l'accesso concorrente di variabili statiche, se ve ne sono), ma ogni thread avrebbe una propria istanza separata di StringBuilder
. Dalla documentazione, non riesco a decidere se questo conta come se fosse usato da più thread o meno.
potrebbe esserci qualche vantaggio nel rendere foo() anche un metodo statico, poiché non tocca alcuna variabile di istanza. – Kip
@Kip: dipende dalla classe. Ma alcune volte potresti voler eseguire operazioni polimorfiche e rendere il metodo statico lo impedirà. – OscarRyz
Utilizzare String.concat sarebbe più veloce, ma penso che questo sia solo un esempio. –