0
点赞
收藏
分享

微信扫一扫

并发容器


总结:


1.并发容器 : 
--并发性不是特别高时候使用这两个
Hashtable
Collections.sychronizedXXX  //传人一个容器,返回一个加锁的容器


--并发性要求比较高使用
ConcurrentHashMap //当容器不需要排序
ConcurrentSkipListMap //高并发并且排序

Hashtable比ConcurrentHashMap慢的原因
Hashtable是锁定整个容器,而ConcurrentHashMap是默认把容器分成16段
当多个线程同时往里面插的时候,只是锁定其中的一段,可以多个线程同时并发的插进其中的几段


CopyOnWriteArrayList //多线程环境下,写时效率低,读时效率高,适合写少读多的环境




2.Queue:并发队列


Queue: 有两种队列

--ConcurrentLinkedQueue: 非阻塞式的并发队列,内部加锁


        --offer(): 相当于add()方法


        --poll(): 拿出来一个并删除


        --peek(): 拿出来不删除


 --BlockingQueue: 阻塞式并发队列--使用生产者消费者模式


        

--LinkedBQ:链表实现,无限队列 


         --ArrayBQ: 数组实现, 有限队列


         --DelayQueue: 执行定时任务,可以设置多长时间被消费者拿走


         --LinkedTransferQueue: 生产者生产一个直接给消费者,应用情形:消费者先启动,生产者生产一个东西的时候不是往队列里面放,而是查看有没有消费者,如果有消费者就不往队列里面放了,直接给消费者消费


        --SynchronousQueue(特许的LinkedTransferQueue): 跟LinkedTransferQueue基本一样,都是先启动消费者,不同的是SynchronousQueue的容量为零,不能调用add()等方法向容器添加元素,只能调用put()方法来阻塞等待消费者消费。而LinkedTransferQueue向容量添加元素,也可以使用transfer()方法阻塞等待消费者消费





------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

同步容器类


1:Vector Hashtable :早期使用synchronized实现 
2:ArrayList HashSet :未考虑多线程安全(未实现同步)
3:HashSet vs Hashtable StringBuilder vs StringBuffer
4:Collections.synchronized***工厂方法使用的也是synchronized


使用早期的同步容器以及Collections.synchronized***方法的不足之处,请阅读

使用新的并发容器
http://xuganggogo.iteye.com/blog/321630


举报

相关推荐

0 条评论