-3

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

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

4

1 回答 1

0

正如他们的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好。

于 2014-06-28T06:58:08.997 回答