容器中心线安全的有vectory、hashtable,非线程安全的有hashmap、arrylist等。
要定义非线程容器,如hashmap、arraylist,请使用Collections中的同步列表(列表)、同步映射(synchronizedmap )或同步集(synchronizedset )
一. Hashtable和Vector
线程安全容器对象: Vector,Hashtable。 所有线程安全容器对象都是使用同步方法实现的。
java.util.concurrent包中的同步容器大多是使用系统的基础技术实现的线程安全。 类似于朴素。 Java8使用CAS。
二. Concurrent包的类
1,concurrent hashmap/concurrent hashset
基于基础散列的同步映射(set )。 效率高,线程安全。 使用系统的底层技术实现线程安全。 级别低于同步。 key和value不能为空。
2,concurrentskiplistmap/concurrentskiplistset
使用较低级别的“跳跃列表”(SkipList )设置同步映射)。 有序,效率略低于ConcurrentHashMap。
三.清单
1,版权所有
时拷贝收藏。 写入效率差,读取效率高。 每次写入数据时,都会创建一个新的基数组。
四. Queue
1,ConcurrentLinkedQueue
基础链表同步队列。
2,LinkedBlockingQueue
阻止队列。 队列容量不足时自动阻止,队列容量为0时自动阻止。
3,ArrayBlockingQueue
基数组实现的有界队列。 自动屏蔽。 不同的调用API(add/put/offer )具有不同的特性。
容量不足时,有封堵能力。
add方法在容量不足时抛出异常。
put方法在容量不足时,屏蔽等待。
单参数关闭方法,不阻止。 如果容量不够,则返回false。 当前的新数据操作将被放弃。
三参数offer方法(offer(value,times,timeunit ) ),容量不够时,阻止times的时间(单位为timeunit ),如果在阻止的时间内有空间的话在块时间范围内,如果没有空间,则放弃添加数据,返回false。
4,延迟队列
延迟队列。 通过比较机制实现自定义处理顺序的队列。 经常用于定时任务。 例如,定时关机。
5,LinkedTransferQueue
移动队列并使用transfer方法实现数据的即时处理。 如果没有消费者,就屏蔽。
6,同步队列
同步队列。 容量为0的队列。 是特殊的传输队列。
现有消费者线程必须等待才能使用的队列。
添加方法,无块。 如果消耗线程未阻止等待数据,则抛出异常。
有上传方法、模块。 如果消费者线程已阻止并未等待数据,则将其阻止。