看StringBuilder 和StringBuffer 的append方法
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
他们都去调用的父类append方法
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;
}
当执行到多个线程执行到 count += len;
于是出现了线程安全问题。线程A执行了线程B修改前的内容
抛出异常在于 父类append中 ensureCapacityInternal(count + len);的调用
多个线程执行到此数组长度已经改变不够用了,但是上一个线程还依然按照原来长度执行数组越界了。。。
StringBuilder怎么就不安全了?
最新推荐文章于 2022-12-23 10:33:58 发布