StringBuffer和StringBuilder之间的差异

时间:2014-06-28 06:28:45

标签: java multithreading stringbuilder stringbuffer single-threaded

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

我看到StringBuilder和StringBuffer都有常见的方法,那么为什么它们的功能各不相同。

1 个答案:

答案 0 :(得分: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)。

同步需要线程获取锁。因为synchronized方法执行此额外操作,所以它比非同步方法慢。

总之,如果你只想构造一个String,并且它不涉及多个线程,那么最好使用StringBuilder而不是StringBuffer。