首先,线程同步,就意味着线程是安全的,在JDK1.1版本中,所有的集合都是线程安全的。但是在1.2及以后的版本中就出现了一些线程不安全的结合,为什么版本升级反而会出现一些线程不安全的集合呢?因为线程不安全的集合普遍比线程安全的集合效率高的多。随着业务的发展,特别是在WEB应用中,为了提高用户体验,减少用户的等待时间,页面的响应速度(也就是效率)是优先考虑的。而且对线程不安全的集合加锁以后也能达到安全的效果(但是效率会低,因为会有锁的获取以及等待)。其实在JDK源码中相同效果的集合线程安全的比线程不安全的就多了一个同步机制,但是效率上却低了不止一点点,因为效率低,所以已经不太建议使用了。下面列举一些常用的线程安全的集合以及相对应的线程不安全集合。
Vector:就比ArrayList多了个同步化机制。
HashTable:就比HashMap多了个线程安全。
ConcurrentHashMap:是一种高效但是线程安全的集合。
Stack:栈,线程安全,继承与Vector。