首页 > 编程知识 正文

线程安全的类有哪些,java中的容器都有哪些

时间:2023-05-04 22:50:43 阅读:40674 作者:4094

容器中心线安全的有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的队列。 是特殊的传输队列。

现有消费者线程必须等待才能使用的队列。

添加方法,无块。 如果消耗线程未阻止等待数据,则抛出异常。

有上传方法、模块。 如果消费者线程已阻止并未等待数据,则将其阻止。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。