java中关于集合的内容也是十分丰富的,而且相关的知识点也是十分多的。多线程集合所涵盖的范围是十分广阔的。今天就来为大家介绍一下,java多线程同步集合是什么以及并发集合是什么?一起来看看吧。
首先我们需要知道的是,无论是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全。
具体内容如下:
一、同步集合类
2.vector
3.同步集合包装类,Collections.synchronizedMap()和Collections.synchronizedList()
二、 并发集合类
1.ConcurrentHashMap
2.CopyOnWriteArrayList
3.CopyOnWriteHashSet
三、性能
同步集合比并发集合会慢得多,主要原因是锁,同步集合会对整个May或List加锁
四、并发集合的实现原理
1.ConcurrentHashMap:把整个Map划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段。
2.CopyOnWriteArrayList:允许多个线程以非同步的方式读,当有线程写的时候它会将整个List复制一个副本给它。如果在读多写少这种对并发集合有利的条件下使用并发集合,这会比使用同步集合更具有可伸缩性。
五、 并发集合的使用建议
1.一般不需要多线程的情况,只用到HashMap、ArrayList,只要真正用到多线程的时候就一定要考虑同步。
2.ConcurrentHashMap实现原理
ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。
一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素, 每个Segment守护者一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。如下图所示:
以上就是关于java多线程同步集合是什么以及并发集合是什么的主要内容了。可以看出内容还是非常详实的。如果你对java知识感兴趣,想要了解更多java常见问题,敬请关注奇Q工具网。
推荐阅读: