就 StringBuilder 和 StringBuffer 类而言,同步意味着什么?

Dan*_*own 5 java stringbuilder multithreading stringbuffer

我对“同步”这个术语很困惑,我从java文档中得到了以下信息。

可变的字符序列。此类提供了与 StringBuffer 兼容的 API,但不保证同步。此类设计为在单个线程使用字符串缓冲区的地方(通常是这种情况)用作 StringBuffer 的直接替代品。如果可能,建议优先使用此类而不是 StringBuffer,因为它在大多数实现下会更快。

据我所知,同步与线程及其访问方式有关。

可以说,我有一个 Web 应用程序在其方法之一中使用 StringBuilder,

  • 这里不保证同步意味着什么?
  • 我应该担心什么吗?我什么时候应该担心多线程?有什么例子吗?
  • 我什么时候应该关心有保证和无保证的同步?
  • 具有多线程的 Web 应用程序的示例是什么?

一个例子将受到高度赞赏。

请注意,我知道多线程访问需要同步,因为它们需要访问相同的数据!我需要一个例子来说明这一点。

Era*_*ran 5

如果多个线程可以StringBuilder同时访问同一实例,您应该关心同步。在这种情况下,您应该考虑使用StringBuffer

例如,在这里您应该考虑使用 aStringBuffer代替StringBuilder

public class Test implements Runnable
{
    public static StringBuilder sb = new StringBuilder();

    public void run ()
    {
        Test.sb.append ("something");
    }

    public static void main (String[] args)
    {
        // start two threads
        new Thread (new Test()).start();
        new Thread (new Test()).start();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您有一个StringBuilder对于某些方法而言是本地的实例,则不存在另一个线程访问它的风险,因此您不需要同步,并且使用StringBuilder会更有效。