Pourquoi utiliser StringBuilder? StringBuffer peut fonctionner avec plusieurs threads ainsi qu'un thread?
Supposons que notre application ont qu'un seul thread. et nous utilisons StringBuffer
alors quel est le problème?
Je veux dire, si StringBuffer
peut gérer plusieurs threads grâce à la synchronisation, quel est le problème à travailler avec un seul fil?
Pourquoi utiliser StringBuilder
à la place?
source d'informationauteur MANISH PATHAK
Vous devez vous connecter pour publier un commentaire.
StringBuffers
sont thread-safe, ce qui signifie qu'ils ont synchronisé méthodes de contrôle de l'accès, de sorte qu'un seul thread peut accéder à un objet StringBuffer synchronisées de code à la fois. Ainsi, StringBuffer objets sont généralement sans danger pour une utilisation dans un environnement multi-threads où plusieurs threads peuvent être en train d'essayer d'accéder à la même StringBuffer objet en même temps.StringBuilder's
l'accès n'est pas synchronisés, de sorte qu'il n'est pas thread-safe. En n'étant pas synchronisés, les performances de StringBuilder peut être mieux que StringBuffer. Ainsi, si vous travaillez dans un seul thread de l'environnement, à l'aide de StringBuilder au lieu de StringBuffer peut entraîner une augmentation des performances. C'est aussi vrai pour d'autres situations, comme un StringBuilder variable locale (c'est à dire, une variable à l'intérieur d'une méthode), où un seul thread va être accéder à un objet StringBuilder.Donc, préfèrent
StringBuilder
parce que,Check this out :
StringBuilder est censé être un (petit) peu plus vite car il n'est pas synchronisée (thread-safe).
Vous pouvez remarquer la différence de vraiment lourd applications.
http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
À l'aide de StringBuffer dans plusieurs threads est à côté de rien et, en réalité, n'arrive presque jamais.
De considérer les éléments suivants
chaque ajout est synchronisé, mais un thread peut s'abaisser à tout moment de sorte que vous pouvez avoir toutes les combinaisons suivantes et plus
Cela peut être évité par la synchronisation de l'ensemble de la ligne à un moment, mais cela va à l'encontre du point de l'utilisation de StringBuffer au lieu de StringBuilder.
Même si vous avez correctement synchronisé vue, il est plus compliqué que la simple création d'un thread copie locale de l'ensemble de la ligne par exemple StringBuilder et les lignes du journal à un moment à une classe comme un Écrivain.
StringBuffer
n'est pas mal dans un seul thread de l'application. Il fonctionnera tout aussi bien queStringBuilder
.La seule différence est la petite surcharge ajoutée en ayant toutes les méthodes synchronisées, ce qui n'apporte aucun avantage dans un seul thread de l'application.
Mon avis est que le principal raison
StringBuilder
a été introduit, c'est que le compilateur utiliseStringBuffer
(et maintenantStringBuilder
) lorsqu'il compile le code qui contientString
concaténation: dans ce cas, la synchronisation est jamais nécessaire et le remplacement de tous ces lieux avec une liste non-synchroniséStringBuilder
peut fournir une petite amélioration de la performance.StringBuilder
a une meilleure performance parce que c'est les méthodes ne sont pas synchronisés.Donc, si vous n'avez pas besoin de construire une Chaîne de caractères simultanément (ce qui est un peu atypique scénario de toute façon), alors il n'y a pas besoin de "payer" pour la synchronisation inutile de frais généraux.
Cela aidera u les gars,
Être Droit Builder est plus rapide que la mémoire Tampon,
Manish, bien qu'il y a juste un thread d'exploitation sur votre StringBuffer exemple, il y a une surcharge de l'acquisition et de libérer le moniteur de verrouillage sur le StringBuffer exemple à chaque fois que ses méthodes sont invoquées. Donc StringBuilder est un meilleur choix dans un seul thread de l'environnement.
Il y a un coût énorme pour synchroniser les objets. De ne pas voir un programme en tant qu'entité autonome; ce n'est pas un problème lors de la lecture des concepts et de les appliquer sur des petits programmes comme vous l'avez mentionné dans votre question, les détails, les problèmes surviennent lorsque nous voulons à l'échelle du système. Dans ce cas, votre seul thread programme pourrait dépendre de plusieurs autres méthodes, des programmes et des entités, de sorte que des objets synchronisés peut causer une grave programmation de la complexité en termes de performances. Donc, si vous êtes sûr qu'il n'est pas nécessaire de synchroniser un objet, alors vous devriez utiliser StringBuilder que c'est une bonne programmation. À la fin, nous voulons apprendre la programmation pour faire évolutive de systèmes de haute performance, de sorte que c'est ce que nous devrions faire!