Java并发编程—结合源码分析ConcurrenthashMap与CopyOnWriteArrayList的原理

2020/2/22 17:02:52

本文主要是介绍Java并发编程—结合源码分析ConcurrenthashMap与CopyOnWriteArrayList的原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java并发编程

代码GitHub地址 github.com/imyiren/con…

  1. 刨根问底搞懂创建线程到底有几种方法?
  2. 如何正确得启动和停止一个线程 最佳实践与源码分析
  3. 多案例理解Object的wait,notify,notifyAll与Thread的sleep,yield,join等方法
  4. 了解线程属性,如何处理子线程异常
  5. 多线程安全和性能问题
  6. JMM(Java内存模型)在并发中的原理与应用
  7. 深入理解死锁问题及其解决方案
  8. 剖析线程池的使用与组成
  9. 带你一文搞懂ThreadLocal的用法以及内部原理
  10. J.U.C下Lock的分类及特点详解(结合案例和源码)
  11. J.U.C下各种Atomic类使用及CAS相关源码分析
  12. 结合源码分析ConcurrenthashMap与CopyOnWriteArrayList的原理
  13. 并发流程控制与AQS原理及相关源码解析

0. 主要内容

  • 文章主要部分分析了两个并发容器的代表:ConcurrenthashMap和CopyOnWriteArrayList

1. 并发容器

1.1 常用的并发容器

  • ConcurrentHashMap:线程安全的HashMap
  • CopyOnWriteArrayList:线程安全的List
  • BlockingQueue:阻塞队列(实现类:ArrayBlockingQueue、LinkedBlockingQueue等)
  • ConcurrentLinkedQueue:非阻塞并发队列,链表实现,可看做线程安全的LinkedList
  • ConcurrentSkipListMap:使用跳跃链表实现的Map

1.2 早期的并发集合

  • Vector和HashTable

    • 内部方法全部用synchronized做同步,并发性能差得一批!
  • HashMap和ArrayList

    • 虽然这两个类不是线程安全的,但是可以用CollectionssynchronizedList(list)synchronizedMap(map)包装使之变成线程安全的

    • 但是实质上,里面还是用synchronized实现, 以map为例:看源码:

        public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
            return new SynchronizedMap<>(m);
        }
    复制代码
        private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable {
            ......
            SynchronizedMap(Map<K,V> m) {
                this.m = Objects.requireNonNull(m);
                mutex = this;
            }
          	......
            public int size() {
                synchronized (mutex) {return m.size();}
            }
            public boolean isEmpty() {
                synchronized (mutex) {return m.isEmpty();}
            }
            public boolean containsKey(Object key) {
                synchronized (mutex) {return m.containsKey(key);}
            }
            ......
    复制代码
    • 我们可以看到源码中,虽然synchronized不是加在方法上,但是其实每个方法都是在调用对应map的方法并在外层包裹synchronized

1.3 现在的并发集合

  • ConcurrenthashMapCopyOnWriteArrayList
    • 用于取代同步的HashMapArrayList以及HashTableVector这些容器
    • 多数条件下

      这篇关于Java并发编程—结合源码分析ConcurrenthashMap与CopyOnWriteArrayList的原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程