今天小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