concurrent包的并发容器
2017-11-05 本文已影响24人
江江的大猪
普通集合小细节
- ArrayList实现RandomAccess这个标志接口,作用是说明这个类在遍历的时候使用迭代器比较慢,因此对list的遍历的最好处理是下面:
if (list instanceof RandomAccess) {
for(int m = 0; m < list.size(); m++){}
} else {
Iterator iter = list.iterator();
while(iter.hasNext()){}
}
-
Jdk自带的unmodifyMap=Collections.unmodifiableMap(realMap)只是对原来realMap的一个视图,直接修改realMap再用unmodifyMap取值会发现还是内容还是变化了,只是返回的视图unmodifyMap不能修改。
-
guava的unmodifyMap=ImmutableMap.copyOf(realMap)原来realMap的修改不会影响unmodifyMap。或者使用ImmutableMap.builder()来构造。
-
非线程安全的集合可以转换成线程安全的集合
只适合并发量少的时候用,因为返回的线程安全集合每个方法都用了synchronized关键字,性能很差
Collections.synchronizedMap(new HashMap());
Collections.synchronizedList(new ArrayList());
Collections.synchronizedSet(new HashSet());
- LockFreeVector无锁队列的基本数据结构是AtomicReferenceArray二维数组
AtomicReferenceArray<AtomicReferenceArray<E>>
ConcurrentHashMap
肥肥小浣熊待续。。。
Aqs重写tryAcquire、tryRelease、tryAcquireShared、tryReleaseShared