【Java】并发篇-目录

大家好,之前事情比较多,导致更新一直不及时,这里给大家先说声抱歉了。接下来我们将开始将并发相关的知识。

作为第一篇,我们来聊聊为什么学并发吧?

最近几年,尤其是 淘宝、京东、拼多多为首的电商,还是微信、 饿了么、美团、抖音这种大用户量的 APP。并发已经作为一种很常用的支撑技术了。而且 最近几年的分布式、系统硬件的井喷,各种并发量轻松百万级别,出去聚会,朋友一问你,并发多少,qps 多少,低的会被鄙视;而想去我们梦想的大厂,并发往往是一个中高级必考的知识点,这其中占用的权重贼高。而并发又牵扯到缓存,负载均衡,以及我们很熟悉的 线程池的 调优,微服务的调优等等。所以可以看出并发的重要性。我们平时不接触这个是因为 系统硬件、jvm、tomcat 和 spring 已经帮我们做了许多,但是一旦被问到相关知识,用到相关技术,可能大部分朋友除了 google ,无他法,写个简单的 synchronized 和 lock 还好,再复杂点的就不会了,因为你永远不会google出你不知道的东西。

在上周我们把 TreeMap 讲完后,就一直在准备并发篇的内容了,其实说真的,基础篇可以适当的水一水,毕竟大家都很熟悉了,项目中也用的很多,至于并发,大家用的比较少了,更有一些朋友,公司规模比较小,并发的场景几乎为 0 。所以我想给大家讲的更加通俗易懂一些,而且市场上各种并发的书籍,课程,视频层出不穷,有我们熟知的神书《Java 并发编程实战》,也有一些培训机构的课程,以及线上课程《入门精通系列》,我最近也找一些朋友看了下,结果怎么说呢,差强人意,并不是说人家讲的不好,毕竟人家老师也是10多年 AT 出来的人,各种 title 一大堆。但是我真想说,吃相太难看了,讲 Synchronized 不讲底层实现,不讲监视器,不讲 JVM 相关的问题,不讲堆栈相关,讲线程生命周期不讲 系统层的线程生命周期,不讲jvm 的处理办法,甚至连并发编程规范也没有。各种原子包更是草草掠过。

所以我想写点比较底层方面的 Java 并发知识文章,就要尽可能的让大家去了解原理,设计思想,底层是如何实现的。毕竟大家都是想进一步提高的,而并发 是我们 中级 -> 高级迈不过去的坎,尤其是想去大厂的朋友来说,所以之后的文章会很细很细,各位看官请不要嫌弃我的啰嗦,为了尽可能的加深并发的映像,可能多篇文章都会提到相同的知识点。

之后的文章需要大家的功底了,而且文中我也会带大家去再次复习。需要用到的相关知识以及参考书籍如下:

  • C/C++
  • 汇编
  • 编译原理
  • 设计模式
  • 现代操作系统
  • Java 并发编程实战
  • Java并发编程的艺术
  • Unix 环境高级编程
  • 操作系统:精髓与设计原理
  • 图解Java多线程设计模式

主要内容如下:

  • 并发概念介绍
  • 信号量
  • 管程
  • Linux 中的线程、进程
  • 理论篇
    • 可见性、原子性、有序性问题
    • Java中对可见性、原子性、有序性 的处理
    • synchorized 的使用
    • Java 中 synchorized 对互斥锁的管程(监视器实现)
    • 死锁/活锁 场景及其避免
    • 线程间的通信
    • 安全/活跃/性能问题
    • 线程生命周期
    • 局部变量、全局变量在线程中的使用和安全性
    • 线程池对线程创建的优化
    • Threadlocal
    • 其他
  • 并发包
    • 原子包
    • 锁包
      • 读写锁
      • 显示锁
      • 条件变量
      • 复制锁
    • 信号量
    • 阀值
    • 并发容器
    • 阻塞队列
    • fork / join
    • 其他
  • 并发算法
    • CAS
    • AQS
    • 其他
  • 设计模式
    • 等待通知模式
    • Copy Write 模式
    • 线程本地存储
    • Balking 模式
    • 分工模式
    • 窃取模式
    • 生产者消费者模式
    • 其他
  • 具体框架实现
    • Netty
    • Tomcat
    • Jetty
    • 其他

可以看出相关内容很多了,当然这只是一个概况,具体文章会加更多。而且每个大知识后面都有一个其他,所以这个系列差不多会破百。其实说白了并发的问题源于一句话:

东西不够,生命有限,互相依赖,需要协调。

因为我们的资源毕竟有限的,所以就要更好的去利用现有的资源去提高服务的吞吐量,去满足更多的用户消费,提高用户的使用体验。

知识如果不是一个体系,我们学到的永远都是片面的

关于学习的问题,我得建议是:

跳出来,看整体设计,钻进去,看内部源码

这是我第一次写这么长的系列文章,尤其是中间涉及到一些底层的东西,以及各种设计模式,可能我自己也没有理解的很清楚。希望大家多多评论,我及时改正。

posted @ 2019-06-26 16:28  haoming1100  阅读(106)  评论(0编辑  收藏  举报
本文作者: haoming1100 博客链接: http://www.cnblogs.com/haoming1100 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载时必须带上原文链接!