聊聊java并发编程 [java实现的基石]

通过本片文章,你可以了解到:
java 是基于那些具体的实现来构建java并发体系的

前提

上一篇我们聊到了并发编程遇到的核心问题(线程间的通信与同步),以及java的解决方案(内存共享)。下面我们具体的聊下java实际实现中依赖于那些工具.

一些概念

    • 因为线程间的通信与同步,我们需要解决的是多线程访问某个资源(在一定时间内只能有部分线程可以访问操作). 我们可以简单的理解为,谁获取到了锁,谁就可以操作。
  • 线程不安全
    • 多线程情况下,对某个公共资源的多次操作会有不同的值(有别于理论上的结果),这就叫线程不安全。反之则称为线程安全。

实际实现的工具

  • 原理层次

    • synchronized
    • volatile
    • final
    • CAS
  • 基于原理实现的工具类

    • java 并发包(JUC)

java并发包(JUC)

  • 实际操作中,我们用到最多的就是JUC了,理解整个java高并发体系的核心也是在于JUC。

    • 先来一张图镇楼

    • 相关模块(从底部向上)

      • volatile 变量读写/CAS (底层实现)

        • 这两个能够保证线程对于同一个变量进行修改 一定是对最新的变量值修改或者是读取。保证数据的正确性。实现基于共享内存模型线程间通讯
        • java 中volatile简单理解: 如果一个变量被volatile修饰,那么对于任意线程对于该线程的读写都可以被其他线程看到
        • CAS 无锁对数据进行修改
      • AQS/非阻塞数据结构/原子变量类(底层接口的抽象封装)

      • Lock/同步锁/阻塞队列/并发容器/Executor (对AQS等进行更高一层的封装)

        1
        2
        本质上其实都是基于volatile以及CAS的类volatile的内存读写语义,
        保证程序的正确顺序来进行线程间的通信与数据同步。

参考

《java并发编程的艺术》方腾飞 魏鹏 程晓明 著