作者介绍
DannyIdea(小林),小册《Java开发者的RPC实战课》的作者,目前正从事Java方向的技术研发,有社交、金融、直播方面的开发经验,平时喜欢钻研开源技术,负责过大型微服务系统重构的核心开发,以及高并发场景的开发工作,有过团队的基础组件开发经验。
- 个人公众号:Idea的技术分享。
- 个人博客:blog.csdn.net/Danny_idea
- 我的码云:gitee.com/IdeaHome_ad…
小册介绍
很多框架或者自研组件的底层,都或多或少涉及到并发编程方面的技术点。掌握不好,工作中难免会遇到一些问题,比如:
- 程序本地跑起来没有 Bug,但是一到多线程环境下就乱了;
- 老大让你去优化接口,每次都没有头绪;
- JUC 的各个 API 都会用,但是不了解内部原理机制;
- 面试问到并发编程就得跪;
- ……
相信很多朋友学习并发编程都背过八股文,但这些都只是停留在技术浅层,并发编程的学习,核心在于应用,并且构建起完善的、可以应付各种问题的知识体系。
我曾花了大约三个月的时间,重新梳理了并发编程的核心知识体系,并且在工作中,尝试将这些学习到的技术点落地到实际项目中,例如:
- 从 0 到 1 搭建了上百容器节点的线程池监控体系;
- 去落地实现了一套分布式id生成器;
- 遇到一些比较耗时的计算任务时,通过合理使用异步编程的某些技术点进行性能优化;
- 理解了线程上下文的原理后,在分布式环境下定制 traceId 对请求链路进行监控;
- 采用多线程+消息队列技术实现分库分表技术;
- 利用 fork/join 技术去计算一些大量级数据任务;
- ……
同时,我还建立了一套个人仓库,内部包含了大约上百个并发编程的案例,期间踩了不少的坑,同时也重构了好几遍自己的知识模型,并且也在企业中落地了一些实战项目。
并发编程代码案例仓库
这本小册,会用简单易懂的语言,将这些技术的本质梳理出来,并且大部分章节都会配备相应的实战代码,这些案例代码都会在gitee上有对应的仓库地址。
不过,这个小册并不会一开始就介绍Java语言体系内的各种并发编程技术,我认为基本功决定了一个人对于高级知识的认知程度,很多高级语言其实都是在对底层技术原理的封装,虽然API名称会有所出入,但是如果你对底层足够了解的话,会发现其实它们大多数都是相通的。而且,并发编程的很多设计与实现,都是源自于操作系统内部的需求所发明的,例如管程、数据一致性、产生并发的原因等。
所以,我们会先系统性梳理下计算机底层原理,能够让大家了解到,前辈在面对这些复杂问题时,会采用怎样的手段去解决,最终起到一个知其然并知其所以然,且有所悟的效果,之后才开始进入到 Java 体系中的并发编程技术。
本小册的主要内容划分为以下 3 个模块:
计算机原理篇
这部分内容偏于操作系统底层,当然,也并不是只有理论,部分案例的讲解或多或少会涉及到C++语言、汇编指令,在一些概念点的讲解上,还会让大家思考计算机底层原理的设计与实现,希望这种场景能够加深大家对于底层原理的理解。
Java并发编程原理篇
这个模块主要是介绍Java并发编程领域常用到的一些技术原理。并发编程领域主要可划分为锁、线程、设计模式三个方向。
- 锁方向:这一模块主要介绍的是关于synchronized关键字在Open JDK中的源代码实现,以及锁升级原理,AQS的底层分析,以及wait,notify,notifyAll,Condition相关原理介绍。
- 线程方向:在这一模块中,主要围绕着线程背后的特性,以及线程的一些底层原理,线程本地变量等方面的分析。
- 设计模式:这一模块中我们重点介绍一些在并发编程模块中所使用到的一些设计思想,扩充下大家的知识视野。
并发编程实战案例篇
通过实战案例,带大家运用并发编程技术解决一些工作中可能遇到的问题,最后还会和大家分享下如何搭建一套可视化的线程池监控系统。其中设计了很多让大家感兴趣的应用场景,例如
- 线程池监控
- 分布式链路id
- 一起设计一把分布式锁
- 本地缓存组件 ……
这些场景中或多或少都会有并发编程的影子,在每一套实战案例的背后都会有配备好充足的代码和相关注释,方便大家阅后学习。
你会学到什么?
- 完整的Java并发编程知识体系
- 应用并发编程知识优化程序性能的能力
- 从 0 到 1 搭建一套线程池监控系统
- 100+个并发编程案例的代码分析和实践
适宜人群
- 1~5 年经验的开发人群,有一定 Java 语言基础;
- 准备参加春秋招的同学;
- 对并发编程领域感兴趣的同学;
- 对技术成长充满渴望的同学。