为什么StringBuilder是线程不安全的?而,StrignBuffer是线程安全的;
首先,上述两个 append(String str)d的方法走的都是其父类的方法。
他们的父类是抽象类 AbstractStringBuilder;、
这个方法就是StringBuilder和StringBuffer共同的扩容的方法。
但是,图上标红的地方在多线程访问的时候,就容易造成混乱,因为他不是原子性的,会被多线程抢占式调用。因此,StringBuilder是不安全的;
但是,StringBuffer是安全的,因为他加了一把锁。防止多线程的抢占式调用。只能一个一个来。
同理:Vector比ArrayList也多了一个锁,因此,安全;
Hashtable比HashMao也多了一个锁,因此,安全;