Java StringBuilder et la Sécurité des Threads

Je suis la construction d'une Chaîne de plusieurs pièces et que vous voulez utiliser soit StringBuffer ou StringBuilder de le faire. À partir de Java 5 docs, je vois que StringBuilder est préférable lorsque cela est possible, avec la réserve que

Instances de StringBuilder ne sont pas sans danger pour une utilisation par plusieurs threads.

À partir de cette déclaration, je comprends que je ne devrais pas avoir un seul StringBuilder instance partagée par plusieurs threads. Mais à quoi au sujet de cette affaire:

//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
    return new StringBuilder(a).append(b).toString();
}

Ici, il pourrait y avoir plusieurs threads dans la fonction, dans le même temps, à l'aide de la StringBuilder classe en même temps (par exemple, l'accès simultané des variables statiques, si il y en a), mais chaque thread a son propre instance distincte de StringBuilder. À partir de la documentation, je n'arrive pas à décider si cela compte comme une utilisation par plusieurs threads ou pas.

il pourrait donc être bénéfique dans la prise de foo() une méthode statique, puisqu'il ne touche pas toutes les variables d'instance.
Dépend de la classe. Mais parfois, vous souhaiterez peut-être effectuer polymorphes activités et de faire la méthode statique sera imped.
L'Aide De La Chaîne.concat serait plus rapide, mais je pense que c'est juste un exemple.
pourrait être utile: Comment puis-je prouver par programme que StringBuilder n'est pas thread-safe?

OriginalL'auteur Ben | 2009-03-10