java并发类容器

一、非同步,不安全
在我们日常编程中,容器的使用率可以说是非常高了,例如List接口下的Arraylist、Set下的HashSet、Map下的HashMap,但是这些容器都是非线程同步的,即多线程访问并不是串行执行,所以是非线程安全的。
二、同步,不完全安全
同步容器类,比如Vector,Hashtable,以及Collections.synchronizedSet,synchronizedList等方法返回的容器,它们在需要同步的方法上加上关键字synchronized,使得多线程访问下该方法,只能一个一个排队执行,实现线程安全,但是在一些复合操作下,仍会带来一些问题,如一个执行删除方法的同时,另一个执行获取方法。
而且加了锁的方法,多线程只能一个一个串行执行,效率太低,不能满足并发需求。
三、并发类容器
并发容器是针对多个线程并发访问设计的,在jdk5.0引入了java.util.concurrent包,其中提供了很多并发容器,如ConcurrentHashMap,CopyOnWriteArrayList等。
ConcurrentMap接口有两个重要的实现:ConcurrentHashMap和ConcurrentSkipListMap(支持并发排序功能,弥补ConcurrentHashMap),ConcurrentHashMap中采用了一种粒度更细的加锁机制,可以称为分段锁,在这种锁机制下,允许任意数量的读线程并发地访问map,并且执行读操作的线程和写操作的线程也可以并发的访问map,同时允许一定数量的写操作线程并发地修改map,所以它可以在并发环境下实现更高的吞吐量。
JDK里的COW容器有两种,分别是CopyOnWriteArrayList和CopyOnWriteArraySet,那么什么是CopyOnWrite容器呢?CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往容器添加,而是先将当前容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写在不同的容器。CopyOnWrite容器特别适用于读多写少的场景,就是基本上都是在读,很少有写的请求的场景。
还有并发的Queue,ConcurrentLinkedQueue和LinkedBlockingQueue,前者是高性能的队列,后者是以阻塞形式的队列,具体实现Queue还有很多,例如ArrayBlockingQueue、PriorityBlockingQueue、SynchronousQueue等。
ConcurrentLinkedQueue:线程安全的无界队列。底层采用单链表。支持FIFO。
ConcurrentLinkedDeque:线程安全的无界双端队列。底层采用双向链表。支持FIFO和FILO。
ArrayBlockingQueue:数组实现的阻塞队列。
LinkedBlockingQueue:链表实现的阻塞队列。
LinkedBlockingDeque:双向链表实现的双端阻塞队列。
有个博客对并发容器写得很全https://blog.csdn.net/u010425776/article/details/54890215

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值