容器的常用方法和线程安全(Map、List、Queue)

一、Map

1. HashTable

线程安全的Map,用synchronized锁

2. Collections.synchronizedMap

Collections.synchronizedMap(new HashMap()) 可以把HashMap变成线程安全的,锁粒度比HashTable稍微小一点

3. ConcurrentHashMap

ConcurrentHashMap主要提高的是读的效率,数据量较多时,写效率没有HashTable高

无序:HashMap =》ConcurrentHashMap

有序(按大小排序):TreeMap =》ConcurrentSkipListMap

二、List

CopyOnWriteArrayList:写时复制,读的时候不加锁,写的时候加锁,复制原来的List,并添加新元素

CopyOnWriteSet

三、Queue:

多线程的情况下,多考虑Queue,少考虑List

1. 基本用法

offer方法是添加数据的,有一个boolean的返回值;

add方法也是添加数据的,没有返回值,添加不进去会抛异常

peek:取数据,并不会remove

poll:取数据,并remove队列中的,原子性是通过CAS实现的

2. BlockingQueue

put:添加数据,如果数据满了,会阻塞等待

take:取数据,如果数据为空了,会阻塞等待

LinkedBlockQueue:最大长度是int的最大值

3. DelayQueue

DelayQueue:按照delayTime排序,时间越短,越靠前

4. PriorityQueue

PriorityQueue:值按顺序排列

5. SynchronousQueue

SynchronousQueue:容量为0,需要有其他线程等待取值,才能put进去值,用于两个线程交换数据

6. LinkedTransferQueue

LinkedTransferQueue:transfer方法,等待其他线程往队列里面放值,等到该值被取走后继续运行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值