concurrent包的并发容器

普通集合小细节

  • 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>

ConcurrentHashMap

待续。。。

concurrent包的并发容器_第1张图片
肥肥小浣熊

Aqs重写tryAcquire、tryRelease、tryAcquireShared、tryReleaseShared

你可能感兴趣的:(concurrent包的并发容器)