温东霖的博客

欢迎来到东霖的技术天地

ConcurrentSkipListMap详解

2016-07-28 posted in [JUC包代码]

介绍: ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。 ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表。但是,第一,它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。第二,ConcurrentSkipListMap是通过跳表实现的,而TreeMap是通过红黑树实现的。 关于跳表(Skip List),它是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的... Read more

ConcurrentHashMap详解

2016-07-26 posted in [JUC包代码]

介绍: ConcurrentHashMap是线程安全的hashmap,在多线程的情况下使用ConcurrentHashMap既能保证线程的安全,又能保证性能的最优,hashtable虽然也是线程安全的,可是在多线程的情况下效率低下。 特点: ConcurrentHashMap在发生冲突的时候和hashmap一样采用链地址法,可是ConcurrentHashMap又多了一种数据结构叫做Segment,每次线程访问的时候只锁其对应的segment,不用的segment可以并发执行。 JDK8对hashmap和ConcurrentHashMap在底层实现上有个重大的改变:JDK... Read more

CopyOnWriteArraySet详解

2016-07-25 posted in [JUC包代码]

介绍: CopyOnWriteArraySet相当于线程安全的HashSet,在多线程的情况下可以使用CopyOnWriteArraySet。 特点: CopyOnWriteArraySet和HashSet虽然都继承于共同的父类AbstractSet;但是,HashSet是通过HashMap实现的,而CopyOnWriteArraySet则是通过CopyOnWriteArrayList实现的,并不是散列表。 Set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。 因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remo... Read more

CopyOnWriteArrayList详解

2016-07-24 posted in [JUC包代码]

介绍: CopyOnWriteArrayList 是可以在多线程下使用的list,相当于线程安全的ArrayList。 特点: 它最适合于List 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。 它是线程安全的。 因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remove() 等等)的开销很大。 迭代器支持hasNext(), next()等不可变操作,但不支持可变 remove()等操作。 使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。在构造迭代器时,迭代器依赖于不变的数组快照。 原理: ... Read more