下面我们从append方法的源码进行分析
StringBuilder
@Overridepublic StringBuilder append(String str) {super.append(str);return this;}
StringBuffer
@Overridepublic synchronized StringBuffer append(String str) {toStringCache = null;super.append(str);return this;}
可以看出StringBuffer在append方法前面加了synchronized,把他变成了一个同步方法。线程之间需抢占,因此线程安全。但是效率也就低了。而StringBuilder的append方法没有加锁,所以线程不安全,会出现多个线程抢占覆盖的现象,因此线程不安全。