线程不安全:多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改,值不同步的情况,进而影响程序的执行流程。
stringbuilder,stringbuffer的关系图如下:
append方法如下:
@Override
public StringBuilder append(String str) {
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;
}
根据线程不安全要求:1.count是私有变量,此处发生了更改,所以是线程不安全的。
2.可能抛出越界异常:
假设线程1,2都跑到ensureCapacityInternal后,线程1调用方法getchars追加成功后,线程2在调用getchars时,count已经增加,但是没有扩容,这个时候就会出现越界异常。