并发编程之学习总结

前言

楼主自1月14号就停更了,这段时间一直在看JVM,因此没有更新任何文章,但楼主觉得有必要总结一下之前学习并发的过程,因为这一次的总结其实就是下一次的开始。主要时总结一下并发的学习路线,因为在楼主的工作环境中,并不是每天都在编写高并发的程序。然而,即使是这样,我们也要知道并发的每个知识点,这样才算一个合格的Java 程序员。那么如何系统的学习并发呢?学习路线是怎么样的呢?

1. 学会开始就成功了一半

首先要确定的思想是:并发编程很复杂,不是看一两篇博客就搞定的。楼主学习学习并发主要看了4本书:

  1. 《并发编程实战》
  2. 《并发编程的艺术》
  3. 《Java 高并发程序设计》
  4. 《深入理解 Java 虚拟机》第五部分:高效并发

也就是上面的几本书。还有一个建议就是,看书最好是看实体的,有什么好处呢?好处就是,当你脑子里有一个疑惑的时候,你能够立马翻书去验证你的想法。而不是打开电子书,慢慢找。不过也有很多人喜欢电子书,毕竟地铁上看书不方便。具体买什么书可以根据自己的情况来。没有最好的,只有最合适的。还有一个问题,就是,看书不一定是从头到尾一字不漏的看,这和死读书差不多。楼主的读书经验是:先快速的将全书过一遍,大概会花一天时间,再找到自己感兴趣的点慢慢看,慢慢配合代码验证。这样效率会高一点。而且理解的会更加深刻。这也算一个学习的方法吧。

那么这四本书先看哪一个呢?楼主是先看的《Java 高并发程序设计》,国人写的。相比较于其余的3本,通俗易懂。注意,看这本书的时候,一定要配合着书敲代码。否则都是白瞎。

2. 逐渐深入

在看完了 《Java 高并发程序设计》 后和写了一些 demo 后,我们应该会基本的并发编程了,知道如何使用 JDK 中的 API,也知道了一些基本的 Java 内存模型,一些关键字的理论。这个时候,我们仅仅是 How 的阶段,也就是使用的阶段。如果你是一个有追求的程序员,你肯定想深入了解并发中哪些奇怪的约定,奇怪的事情到底是如何发生的,那么,就需要继续读书,写代码。

这个时候,就需要看看《并发编程的艺术》和《深入理解 Java 虚拟机》第五部分:高效并发,这两本书,重点深入原理,配合 JVM 源码和 汇编深入解释并发的原理。读起来酣畅淋漓。将之前的哪些困惑一扫而空。至于为什么看两本,因为每本书都不是完美的,那些写书的作者的观点也会不同,因此,我们需要知道的更多,并对比他们的看法,才能更加深入的形成自己的思维模型。不能只跟着一本书走。

这两本书主要是理论,但请注意,其中的理论我们可以用代码来验证,才能更深刻的加深印象。

3. 深入源码

在了解了原理之后,我们只是得到了理论知识,但很虚无,如果你是个好奇猫,那么你肯定想知道这些设计是如何实现的。幸运的是,从 Java 源码中,我们就能知道百分之90 了(剩下的在 HotSpot 源码中)。这个时候我们做什么呢?

硬肛!!!翻起我们之前写的那些 demo,比如 new Thread(),new ConcurrentHashMap(),这些我们之前练习的 demo,配合我们的开发工具(强烈推荐 IDEA),鼠标左键 + ctrl,进入源码查看如何实现。源码重点在 java.util.concurrent 包下。这些都是并发大师 Doug Lea 的杰作。值得反复品味。当然,看源码的时候,也可以顺带结合源码看看之前的书。加深印象。

只有看懂了源码,你才能说,你真正知道了原理。

在看源码的过程中,有痛苦,有快乐,起码楼主是这样的。痛苦的是:很多奇怪的地方看不懂。快乐的是:那些奇怪的地方终于搞懂了。这就是编程的乐趣吧。像一个侦探,慢慢的解开所有的疑惑,最后找到真相。

为什么说硬肛呢?从短期来说,看源码处理满足好奇心,并不能给你带来什么好处。如果看源码不能给你带来快乐,那么,很快,你就会坚持不下去,但是,请注意:这是你进阶高级 Java 程序员的一个标志。

当然,不是所有的源码都是要看的。这时候就体现出 demo 的重要性了,如果你之前没有 demo,那么你将无从下手。但是,如果你听了楼主的:边看书的同时也写了demo,那么这个时候,你就可以顺着demo看源码了,有什么好处呢?好处就是:你从源码层面了解了你使用的api的具体实现。从这个意义上说:你已经学会并发编程了。

也许,经过一到两个月的阅读源码的过程,你对 JUC (java.util.concurrent)包下的 API 已经了如执掌,恭喜你,你终于学会了并发编程。不读源码,不足以谈并发。

总结

通过上面的3个步骤,基本就能搞定 Java 并发编程,看这篇文章的你,可以算一下时间,楼主估算了一下,如果你是在职的,那么你需要在工作之余完成这件事情,大概需要2个多月,当然这也要看你的 Java 基础好不好了,这和平时的积累有很多关系。如果你是个天才,当楼主没说。但大部分人都是凡人,都是靠着坚持和努力才能达到自己的目标。所以,请努力吧!

最后,当你看完了 JUC 的源码,感觉还不过瘾,HotSpot 的源码等着你,够你喝好久。因为楼主正在喝 HotSpot 的源码。哈哈哈哈。