StringBuffer和StringBuilder是否线程安全
今天小G有一个面试题,面试题内容为:StringBuffer和StringBuilder是否线程安全? 所以在此写一个博客说明下,二话不说,直接上代码,程序员必备(小G:答案是stringBuffer是线程安全)
StringBuffer buffer= new StringBuffer(); buffer.append("d");
然后我们进入appen里面看看
@Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }
大家有没有看到synchronized,在方法上面,说明是有线程安全的
然后再看下StringBuilder
StringBuilder builder= new StringBuilder(); builder.append("1");
进入append里面
@Override public StringBuilder append(String str) { super.append(str); return this; }
是没有synchronized,不是线程安全 另外可以看看扩展因子
public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this; }
其实如果没有synchronize的话,在count+=len,所以如果并发比较大,尽量少用stringBuilder