Hashtable 同步表
跟HashMap一样,不同的是Hashtable线程安全的,效率比较低,锁的整个表,只支持一个线程同时运行,一般使用它的替代者ConcurrentHashMap
ConcurrentHashMap
同步的Hash表数据结构,替代Hashtable,效率比Hashtable高(线程数有关,线程数越多越有优势),下面是国外的一张比较Hashtable和ConcurrentHashMap效率的测试表
Threads | ConcurrentHashMap | Hashtable |
---|---|---|
1 | 1 | 1.03 |
2 | 2.59 | 32.4 |
4 | 5.58 | 78.23 |
8 | 13.21 | 163.48 |
16 | 27.58 | 341.21 |
32 | 57.27 | 778.41 |
HashMap 表
存放key、value键值对的数据结构,特点是读比较块,而写比较慢
LinkedHashMap 链表
HashMap加了链表的特性,拥有HashMap的全部功能,但因为加了链的功能,所以其特点是写比较快而读比较慢
TreeMap 树表
底层实现是红黑树,排序的表,读效率比较高,写效率偏低
ConcurrentSkipHashMap 跳表
跳表是对元素进行排序了的读写都比较快的数据结构,读取一个数,如下图所示
CopyOnWriteArrayList
写时复制,在写的时候会复制一份原数组长度+1的新数组,并且将新的元素加到最后面一个位置,因此写的效率不高,它是线程安全的。而在读的时候是不需要加锁的,因为读的跟写的是2份一模一样的数据,因此效率较高
简单使用代码如下
public class CopyOnWriteArrayListDemo {
public static void main(String[] args) {
List<String> lists =
//new ArrayList<>(); //这个会出并发问题!
//new Vector();
new CopyOnWriteArrayList<>();
Random r = new Random();
Thread[] ths = new Thread[