字符串缓冲区被同步的用途是什么

时间:2018-06-28 18:33:38

标签: java multithreading concurrency

被同步的StringBuffer方法的用途是什么。当一个线程在更改字符串缓冲区时,其他线程则无法实际应用和使用

4 个答案:

答案 0 :(得分:2)

我认为线程安全是对正确性(避免未定义行为)的优化。在多线程环境中,至少通过线程安全使用StringBuffer(从无竞争条件或未同步访问的角度来看,这是正确的)

  

字符串缓冲区可安全用于多个线程。

这可能会或可能不会影响您的性能成本。

如果您不需要线程安全,即您处于单线程环境中,或者该字符串在单个函数调用本地,则看起来您可以使用未同步的StringBuilder。 / p>

答案 1 :(得分:2)

  

StringBuffer的实际应用和用途是什么?

几乎没有,这就是为什么将其替换为StringBuilder的原因。

这是过去的遗留类,它不被弃用,因为有很多代码在使用它。

例如即使在Java 1.5中添加了StringBuilder,但在Java 1.4中添加了正则表达式类Matcher,直到Java 9才获得StringBuilder的支持(请参见appendReplacement

正如Javadoc所说:

  

从JDK 5版本开始,该类已经添加了一个等效类,该类旨在供单个线程StringBuilder使用。 StringBuilder类通常应优先于此类使用,因为它支持所有相同的操作,但是它更快,因为它不执行同步。

答案 2 :(得分:0)

字符串缓冲区可以安全地用于多线程应用程序中,因为它在多线程环境中不会造成数据不一致。

示例:当我有一个字符串构建器,其初始值为“ Java”,并且如果thread1尝试将“ is”添加到String builder中,则thread2试图添加“ supported”,则有可能该字符串构建器可能会变成“ Java is”或“支持Java”或“支持Java”,从而导致数据不一致。

如果使用字符串缓冲区,如果线程1试图添加“是”,则线程2将等待,因此只能变为“支持Java”

答案 3 :(得分:-1)

StringBuffer,如果您有一个对象,其值可以由多个线程更改和修改。因此,字符串缓冲区中的同步将有助于进行多次更改。