1、Vector
Vector和ArrayList類似,是長度可變的數組,與ArrayList不同的是,Vector是線程安全的,它給幾乎所有的public方法都加上了synchronized關鍵字。由於加鎖導致性能降低,在不需要併發訪問同一對象時,這種強制性的同步機制就顯得多餘,所以現在Vector已被棄
2、HashTable
HashTable和HashMap類似,不同點是HashTable是線程安全的,它給幾乎所有public方法都加上了synchronized關鍵字,還有一個不同點是HashTable的K,V都不能是null,但HashMap可以,它現在也因爲性能原因被棄用了
3、ConcurrentHashMap
在JDK1.8之前,ConcurrentHashMap加的是分段鎖,也就是Segment鎖,每個Segment含有整個table的一部分,這樣不同分段之間的併發操作就互不影響
JDK1.8對此做了進一步的改進,它取消了Segment字段,直接在table元素上加鎖,實現對每一行進行加鎖,進一步減小了併發衝突的概率