【发布时间】:2014-09-09 07:36:53
【问题描述】:
在this 教程中,StringBuffer 是同步的,而 StringBuilder 不是
类可以同步吗?
我知道同步方法是为特定线程锁定的,非同步方法没有。但是如何使用非同步方法提高程序的性能?
-
来自here的代码
public class Main { public static void main(String[] args) { int N = 77777777; long t; { StringBuffer sb = new StringBuffer(); t = System.currentTimeMillis(); for (int i = N; i --> 0 ;) { sb.append(""); } System.out.println(System.currentTimeMillis() - t); } { StringBuilder sb = new StringBuilder(); t = System.currentTimeMillis(); for (int i = N; i --> 0 ;) { sb.append(""); } System.out.println(System.currentTimeMillis() - t); } } }为
StringBuffer提供2241 ms的数字,而为StringBuilder提供753 ms。
根据this,extracode 是 StringBuffer 中的 synchronized 关键字。这个 synchronized 关键字是否会花费额外的 1488 毫秒,如果是,那么我们是否应该总是更喜欢 StringBuilder 而不是 StringBuffer?
提前致谢。
【问题讨论】:
-
@Pablo 它不是重复的,我知道 StringBuffer 和 StringBuilder 之间的区别,我问的是两者的性能问题而不是区别。
-
区别恰恰在于性能。由于同步逻辑,StringBuffer 速度较慢,即使您不使用该功能也是如此。该问题中的答案解决了
标签: java multithreading