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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章