并发编程

并发编程这四个字想必大家最近都在网上看到过有很多的帖子在讨论。我们都知道并发编程可选择的方式有多进程、多线程和多协程。在Java中,并发就是多线程模式。而多线程编程也一直是一个被广泛而深入讨论的领域。如果遇到复杂的多线程编程场景,大多数情况下我们就需要站在巨人的肩膀上利用并发编程框架——JDK Concurrent包来解决相关线程问题。


Concurrent包很复杂吗?

相信很多人对于Concurrent并发包都是一知半解,更别说Concurrent包源码了。(大牛另当别论)可以说要是Concurrent包与其源码有一定的了解的话是完全可以避免重复造轮子,也能避免因为使用不当而掉到“坑”里,更不会说停留于一个“似是而非”的阶段。那么问题来了,如何学?不要慌,互联网雷锋(小编我)前段时间从一位美团的老哥手上弄到一份:Java并发JDK源码剖析宝典,看完之后有感而发,特来分享给大家!

不多bb,我们直接上内容!

由于篇幅限制,这份文档一共有384页,小编没办法全部为大家展示出来,还望见谅。

多线程基础

  • 线程的优雅关闭
  1. stop ( )与destory ()函数
  2. 守护线程
  3. 设置关闭的标志位

    • synchronized关键字
    1. 锁的对象是什么
    2. 锁的本质是什么
    3. synchronized实现原理
    • wait()与notify()
    1. 生产者-消费者模型
    2. 为什么必须和synchronized一起使用
    3. 为什么wait ()的时候必须释放锁
    4. wait () 与notify ()的问题

      • volatile关键字
      1. 64位写入的原子性(Half Write)
      2. 内存可见性
      3. 重排序:DCL问题


      • 综合应用:无锁编程
      1. 一写一读的无锁队列:内存屏障
      2. 一写多读的无锁队列:volatile关键字
      3. 多写多读的无锁队列:CAS
      4. 无锁栈
      5. 无锁链表

      Atomic类




      Lock与Condition

      • 互斥锁


        • 读写锁


          • Condition


          • StampedLock

          • 同步工具类




            并发容器

            • BlockingQueue
            1. ArrayBlockingQueue
            2. LinkedBlockingQueue
            3. PriorityBlockingQuueue
            4. DelayQueue
            5. SynchronousQueue
              • BlockingDeque
              • CopyOnWrite
              1. CopyOnWriteArrayList
              2. CopyOnWriteArraySet
              • CncrertinkedQueue/Deque
              • CorcurrentHashMap
              1. JDK 7中的实现方式
              2. JDK 8中的实现方式

              • CnucrenskiplistMap/Set
              1. ConcurrentSkipListMap
              2. ConcurrentSkipListSet

              线程池与Future

              • 线程池的实现原理

                • 线程池的类继承体系
                • ThreadPoolExector
                1. 核心数据结构
                2. 核心配置参数解释
                3. 线程池的优雅关闭
                4. 任务的提交过程分析
                5. 任务的执行过程分析
                6. 线程池的4种拒绝策略

                  • Callable与Future

                    • ScheduledThreadPoolExecutor
                    • Executors工具类

                    ForkJoinPool


                    • ForkJoinPool用法

                      • 工作窃取队列

                        • 工作窃取算法:任务的执行过程分析
                        1. 顺序锁eqLock
                        2. scanGuard解析

                          CompletableFuture

                          • CompletableFuture内部原理
                          1. CompletableFuture的构造:ForkJoinPool
                          2. 任务类型的适配
                          3. 任务的链式执行过程分析
                          4. thenApply与thenApplyAsync的区别




                          • 任务的网状执行:有向无环图


                          由于篇幅限制,这份文档一共有384页,小编没办法全部为大家展示出来,还望见谅

                          写在最后

                          并发除了要考虑静态资源、死锁、资源公平性等问题,往往还需要考虑性能问题,在一些业务场景往往还会比较复杂,这些都给java coder们造成了不小的难题。如果你对concurrent包有一定理解就能解决了不少问题。