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