为什么使用StringBuilder?StringBuffer可以与多个线程以及一个线程一起使用?

假设我们的应用程序只有一个线程。而我们正在使用那么问题出在哪里呢?StringBuffer

我的意思是,如果可以通过同步处理多个线程,那么使用单个线程有什么问题?StringBuffer

为什么要改用?StringBuilder


答案 1

StringBuffers是线程安全的,这意味着它们具有同步方法来控制访问,以便一次只有一个线程可以访问 StringBuffer 对象的同步代码。因此,在多线程环境中使用 StringBuffer 对象通常是安全的,其中多个线程可能尝试同时访问同一个 StringBuffer 对象。

StringBuilder's访问未同步,因此它不是线程安全的。通过不同步,StringBuilder的性能可以比StringBuffer更好。因此,如果您在单线程环境中工作,则使用StringBuilder而不是StringBuffer可能会提高性能。对于其他情况也是如此,例如StringBuilder局部变量(即方法中的变量),其中只有一个线程将访问StringBuilder对象。

所以,更喜欢因为,StringBuilder

  • 性能提升小。
  • StringBuilder 是 StringBuffer 类的 1:1 直接替换。
  • StringBuilder不是线程同步的,因此在大多数Java实现上表现更好

看看这个:


答案 2

StringBuilder应该快一点(微小),因为它不是同步的(线程安全的)。

您可以注意到在非常繁重的应用程序中的差异。

StringBuilder 类通常应优先于此类使用,因为它支持所有相同的操作,但它更快,因为它不执行同步。

http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html