美文网首页
concurrent包的并发容器

concurrent包的并发容器

作者: 江江的大猪 | 来源:发表于2017-11-05 19:28 被阅读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

    相关文章

      网友评论

          本文标题:concurrent包的并发容器

          本文链接:https://www.haomeiwen.com/subject/zwehmxtx.html