1.并发容器 :
--并发性不是特别高时候使用这两个
Hashtable
Collections.sychronizedXXX //传人一个容器,返回一个加锁的容器
--并发性要求比较高使用
ConcurrentHashMap //当容器不需要排序
ConcurrentSkipListMap //高并发并且排序
Hashtable比ConcurrentHashMap慢的原因
Hashtable是锁定整个容器,而ConcurrentHashMap是默认把容器分成16段
当多个线程同时往里面插的时候,只是锁定其中的一段,可以多个线程同时并发的插进其中的几段
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://blog.csdn.net/itm_hadf/article/details/7506529
使用新的并发容器
http://xuganggogo.iteye.com/blog/321630
5: