【问题标题】:Differences between StringBuffer and StringBuilder [duplicate]StringBuffer 和 StringBuilder 之间的区别 [重复]
【发布时间】:2014-06-28 06:28:44
【问题描述】:

为什么 StringBuffer 是线程安全的,为什么 StringBuilder 不是。为什么 StringBuffer 在多线程中效果最好,而 StringBuilder 在单线程中效果最好。

我看到 StringBuilder 和 StringBuffer 都有一些通用的方法,那么为什么它们的功能会有所不同。

【问题讨论】:

    标签: java multithreading stringbuilder stringbuffer single-threaded


    【解决方案1】:

    正如他们的 javadoc(http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.htmlhttp://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html)中所述,StringBuffer 和 StringBuilder 提供了相同的操作集。它们之间的唯一区别是StringBuffer中的操作是同步的,而StringBuilder中的操作不是。

    由于 StringBuffer 中的操作是同步的,所以 StringBuffer 是线程安全的,这意味着多个线程可以安全地对同一个 StringBuffer 进行操作。相反,StringBuilder 中的操作是不同步的。如果多个线程需要对同一个StringBuffer进行操作,则需要手动同步这些线程(或者,使用StringBuffer)。

    同步需要线程获取锁。因为同步方法执行这个额外的操作,它比非同步方法慢。

    综上所述,如果你只是想构造一个String,并且不涉及多个线程,那么使用StringBuilder比使用StringBuffer更好。

    【讨论】:

    • 您的评论中有问题:“StringBuffer 中的操作是同步的”......“相比之下,StringBuffer 中的操作是不同步的。”。您需要将一些 StringBuffer 更改为 StringBuilder
    • @DavidPostill 谢谢,已修复。
    猜你喜欢
    • 2010-09-26
    • 2012-09-09
    • 2011-02-24
    • 2013-07-27
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多