美文网首页
java语言之一-java并发知识体系简要指南

java语言之一-java并发知识体系简要指南

作者: Wu杰语 | 来源:发表于2018-10-28 20:59 被阅读0次

    java并发,是个比较大的知识体系,比较值得一学,网上有很多介绍相关知识点,这篇文章的目的主要是梳理一些相关知识,能够学习的时候更加有条理,不被绕糊涂。

    并发知识体系

    image.png

    我画了一个图,可以帮助理解相关知识体系:

    1. 最底层是硬件CPU的支持和内存理论

    • 硬件主要是多核CPU,CAS指令等,JAVA多线程的这套实现机制有很多优化,这些优化都是针对多核CPU的,例如说利用CAS设计的自旋,Sychronizer中的锁升降级。多核就是JAVA多线程设计的一个基本场景,但是在理解的时候很容易被忽略。
    • JMM内存理论,主要是讲一致性、有效性、原子性。这里有很多资料接受,可以自己去查。

    2. 中间一大块,就是JAVA的ECF(exception control flow)这块分为两个部分:

    • 语言级的实现,Sychronizer,这个模型主要基于管程,可以查一下管程相关的理论。实际上就是把对象和线程结合在一起实现管程,对象的结构中存储轻量级锁、偏向锁、重量级锁的数据,在java虚拟机中,调度的时候通过一定的条件,进行锁的升降级,这是一种优化设计,通过这种优化设计确保在不必要加锁(中断,因为中断会导致上下文切换)。

    • Concurrent Lock,JDK5及以后实现的比较新的Lock系列,可以发现比较新的JDK源码和各种开源代码都是基于lock系列实现的,因为基于lock实现的代码确实比基于管程的实现效率高。

      图中画出了实现的层级,理解这一块,需要去读源码,实现分为三层:

      • 最底层是unsafe,封装了比较重要的CAS和park两种实现基础,
      • 然后在这个上一层是实现的中间层通用代码LockSport和AQS,
      • 最上层则是Lock、Sepmophore、cond、CountDownLanch、CyclicBarrier具体的lock工具,是锁在各种场景下的语义封装。

    3. Thread层,线程本身,线程本身需要理解线程的状态,线程的Runnable、Callable、Future两种基础形态,因为Callable和Future出现的比较晚,所以是和线程池紧紧结合在一起的。

    4. 最上层,这是在线程和线程ECF上封装的各种工具类:

    • 原子类,有四种,可以直接看源码,AtomicInteger等,都是基于CAS实现的。
    • 容器类,包括Map、Queue的各种线程安全变体,其中对于Queue,有PriorityBlockedQueue、LinkedBlockedQueue、ArrayBlockedQueue等,需要理解的是这些各种容器支持的场景、算法以及优缺点,这块也是比较大的知识体系。特别说明的是,对于多核场景下,这些有锁的容器出现意义很大,现实世界,都是多核、集群或者异地并发的场景,算法和锁结合设计出新的数据结构和算法。
    • 最上层就是并发框架,包括线程池、Fork/Join、CompleteFuture等.

    小结

    JAVA并发是个比较大的知识体系,想学好不容易,资料特别多,知识点也特别多,如果不搞清楚这个知识结构,就会陷入到各种细节中顾此失彼。本文没有讲比较详细的细节,后面会用几个章节对比较感兴趣的一些点讲述一下。

    相关文章

      网友评论

          本文标题:java语言之一-java并发知识体系简要指南

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