为什么StringBuffer是线程安全的,为什么StringBuilder不是。为什么StringBuffer在多线程中效果最好而StringBuilder在单线程中。
我看到StringBuilder和StringBuffer都有常见的方法,那么为什么它们的功能各不相同。
答案 0 :(得分:0)
如他们的javadoc(http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html和http://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。