【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
- 其他
可以看出相关内容很多了,当然这只是一个概况,具体文章会加更多。而且每个大知识后面都有一个其他,所以这个系列差不多会破百。其实说白了并发的问题源于一句话:
东西不够,生命有限,互相依赖,需要协调。
因为我们的资源毕竟有限的,所以就要更好的去利用现有的资源去提高服务的吞吐量,去满足更多的用户消费,提高用户的使用体验。
知识如果不是一个体系,我们学到的永远都是片面的
关于学习的问题,我得建议是:
跳出来,看整体设计,钻进去,看内部源码
这是我第一次写这么长的系列文章,尤其是中间涉及到一些底层的东西,以及各种设计模式,可能我自己也没有理解的很清楚。希望大家多多评论,我及时改正。