“StringBuffer est synchronisé (ou thread-safe) et StringBuilder est pas”, pourquoi n'est-ce StringBuffer méthodes plus lent?
Après la lecture de ce - Ce n'est "synchronisé"? j'étais toujours incapable de comprendre pourquoi StringBuffer serait plus lent que StringBuilder dans un thread-safe de l'environnement. Ce supplément de temps de travail ne StringBuffer avoir à le faire, il est plus lent?
Vous répondez à votre propre question. Le StringBuffer sont synchronisées de sorte qu'il a à faire plus de travail que l'autre n'ont à faire. Ce qui le rend pire, dans ce cas, c'est que 99% du temps ce n'est pas nécessaire.
... et le fil qui il a des liens à beaucoup explique pourquoi les coûts de synchronisation un peu plus de code, sans synchronisation.
Puisque le point de la question précédente n'était pas sur ce supplément de travail, une méthode synchronisée, j'ai eu à assumer, il peut être plus que ce qui a été mentionné dans les réponses (pour justifier les très véhémente " Ne pas utiliser StringBuffer sauf si vous avez besoin de Synchronisation des déclarations que j'ai rencontré). La réponse sélectionnée ci-dessous donne les informations dont j'avais besoin. Je pense que la question est justifiée.
pourrait être intéressant: Comment puis-je prouver par programme que StringBuilder n'est pas thread-safe?
... et le fil qui il a des liens à beaucoup explique pourquoi les coûts de synchronisation un peu plus de code, sans synchronisation.
Puisque le point de la question précédente n'était pas sur ce supplément de travail, une méthode synchronisée, j'ai eu à assumer, il peut être plus que ce qui a été mentionné dans les réponses (pour justifier les très véhémente " Ne pas utiliser StringBuffer sauf si vous avez besoin de Synchronisation des déclarations que j'ai rencontré). La réponse sélectionnée ci-dessous donne les informations dont j'avais besoin. Je pense que la question est justifiée.
pourrait être intéressant: Comment puis-je prouver par programme que StringBuilder n'est pas thread-safe?
OriginalL'auteur Shailesh Tainwala | 2011-06-09
Vous devez vous connecter pour publier un commentaire.
Il y a quelques petits frais généraux de l'acquisition et de la relâcher, même un uncontended de verrouillage, et verrouillage de l'élision ne fonctionne pas dans
StringBuffer
même si la plupart des cas ne sont pas utilisés de la croix-thread, car une instance pourrait être.Voir http://book.javanb.com/java-threads-3rd/jthreads3-CHP-5-SECT-1.html pour une description de ce que le VM a à faire lors de l'acquisition et de suppression des verrous.
OriginalL'auteur Mike Samuel
S'assurer que les choses sont synchronisées. Ou, plus au point, désynchronisés. La synchronisation d'un appel de méthode signifie deux appels de cette méthode (sur cet objet si elle n'est pas statique) ont à leur tour entrer dans la méthode. Le fil B ne peut pas entrer dans la méthode synchMeth jusqu'à ce que le Thread A (déjà dans la méthode) a fini.
Les contrôles pour savoir si un bloc synchronisé a été verrouillé ou non, et par qui, prendre du temps supplémentaire.
OriginalL'auteur Atreys
Lire ce de JavaDoc
Vous devez lire cet article sur StringBuffer vs StringBuilder comparaison des performances
Supplémentaires Lien Utile : Différence entre StringBuffer et de la classe StringBuilder.
OriginalL'auteur sgokhales