列一些功能相同或者近似的两个类来对比,其中一个的方法是线程安全的,另一个则不是线程安全的
1.HashMap与Hashtable
HashMap和Hashtable都实现了Map接口,都是用键值对来保存数据的方式。
HashMap可以保存null,而且是非线程安全的
Hashtable不可以保存null, 而且是线程安全的
2.StringBuffer和StringBuilder
StringBuilder是非线程安全的
StringBuffer是线程安全的
建议单线程的时候就使用StringBuilder,多线程的时候使用StringBuffer,因为StringBuilder会更快一点(因为不需要synchornized同步,所以省时),但是没有StringBuffer安全。
3.ArrayList和Vector
从源码上看,ArrayList和Vector是一样的,区别在于
ArrayList是非线程安全的
Vector是线程安全
关于容器,可以借助工具类Collections的Collections.synchroinzedList()方法来把ArrayList, HashSet, LinkedList, HashMap这些非线程安全的类变为线程安全。