【问题标题】:StringBuffer vs StringBuilder [duplicate]StringBuffer vs StringBuilder [重复]
【发布时间】:2015-12-13 04:20:21
【问题描述】:

我正在学习算法实现课程。我的老师提到了StringBuffer和StringBuilder,他说StringBuffer比StringBuilder更安全,因为在线程方面。真的吗?如果是这样,那是什么意思?我查了这个问题和很多提到同步的答案。谁能解释一下这意味着什么以及这如何使 StringBuffer 比 StringBuilder 更安全?

【问题讨论】:

  • 另请注意,这并不意味着您应该更喜欢使用StringBuffer 而不是StringBuilder。恰恰相反——无论何时你在本地使用它,在一个线程中,总是更喜欢StringBuilder。仅在需要在线程之间共享字符串构建对象的地方使用StringBuffer
  • 您几乎不需要StringBuffer 的“额外安全”,它只会产生额外的性能成本而没有任何好处。

标签: java algorithm stringbuilder synchronized stringbuffer


【解决方案1】:

StringBuffer 已同步所有方法。

来自java doc

线程安全、可变的字符序列

同步是一种同步线程访问部分代码的系统,这样最多一个线程可以执行一个同步块。

如果您的代码不是多线程的,或者只是如果您使用的StringBuffer 没有在线程之间共享,请使用StringBuilder。它更快。

来自StringBuilder的javadoc

可变的字符序列。这个类提供了一个 API 与 StringBuffer 兼容,但 不保证 同步。此类设计用作插件 在字符串缓冲区所在的位置替换 StringBuffer 由单个线程使用(通常情况下)。在哪里 可能,建议优先使用该类 StringBuffer,因为它在大多数实现下会更快

【讨论】:

    【解决方案2】:

    由于它的所有方法都是同步的,这意味着即使你有100个线程(或更多)同时使用和修改它,它也会在处理其他请求之前完全执行每个操作。使用 StringBuilder 你就没有这样的保证。

    【讨论】:

      猜你喜欢
      • 2011-04-16
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2011-02-27
      • 2016-05-12
      • 2012-10-09
      • 2012-07-01
      相关资源
      最近更新 更多