-
线程安全集合类可以分为三大类:
-
遗留的线程安全集合如 Hashtable , Vector
-
使用 Collections 装饰的线程安全集合,如:
-
Collections.synchronizedCollection
-
Collections.synchronizedList
-
Collections.synchronizedMap
-
Collections.synchronizedSet
-
Collections.synchronizedNavigableMap
-
Collections.synchronizedNavigableSet
-
Collections.synchronizedSortedMap
-
Collections.synchronizedSortedSet
-
-
java.util.concurrent.*
-
-
从Java5开始,Java在java.util.concurrent包下提供了大量支持高效并发访问的集合类,它们既能包装良好的访问性能,有能包装线程安全。这些集合类可以分为两部分,它们的特征如下:
-
以Concurrent开头的集合类:(底层是cas (cas底层使用的是Unsafe类,ConcurrentLinkedDeque底层就用了cas)+ sychronized)
以Concurrent开头的集合类代表了支持并发访问的集合,它们可以支持多个线程并发写入访问,这些写入线程的所有操作都是线程安全的,但读取操作不必锁定。以Concurrent开头的集合类采用了更复杂的算法来保证永远不会锁住整个集合,因此在并发写入时有较好的性能。
-
以CopyOnWrite开头的集合类:(底层是ReentrantLock)
以CopyOnWrite开头的集合类采用复制底层数组的方式来实现写操作(写入时拷贝)。当线程对此类集合执行读取操作时,线程将会直接读取集合本身,无须加锁与阻塞。当线程对此类集合执行写入操作时,集合会在底层复制一份新的数组,接下来对新的数组执行写入操作。由于对集合的写入操作都是对数组的副本执行操作,因此它是线程安全的。
-
JUC相关问题(1)
最新推荐文章于 2023-03-31 15:46:27 发布