对于书评这件事情,我其实是不想写的,因为每个人都有自己的一个衡量标准,每个人眼中都有自己的哈姆雷特,是好是坏每个人都褒贬不一。如果对于书中的知识你都掌握了,你只是想把它作为一种知识串联的记忆体的话,那么你可能感兴趣的事整本书的知识框架和体系脉络,所以如果书中的知识具有连贯性,能够在你脑海中编织出你想要的记忆蓝图,那么我相信它对你来说就没那么好;如果你想把它作为打开新世界的大门,你想了解一下并发编程的奥妙,我相信它对你来说也是一本好书,能够拓展你的知识深度;如果你是面向面试来看它,它也是一本好书,因为绝大多数知识都是面试的常考点。
下面我会从上面的几个假如来带你过一遍这本书。
前置知识首先先来混个脸熟,我相信大家都不陌生了,上书!!!
首先,这本书是由三个人撰写的,这三位都是阿里人,我用一幅图来说明这三个人都写了哪些内容。
如果是由三个人合力撰写的一本书,如果不能做到对书整体脉络有把控的话,就会陷入聋子听哑巴说瞎子看见鬼了这种逻辑上不能自洽的局面,但是我能从书中看出来,出版社和方老师在对整体知识体系的脉络上面做到了严格把控,但我认为还是差点。
谨言慎行,我会尽量做到以极其客观的角度来解读这本书。
首先第一章并发编程的挑战这个立意非常不错,把整本书所讲的主要内容先引出来,使读者大致了解一下并发编程都会带来哪些问题,然后切入并发编程的痛点,即并发编程的性能瓶颈。
然后第二章直接深入 Java 并发机制的底层实现,这一章的内容和深度我认为有待商榷,但是如果从精读的角度来看,这并没有什么不妥,同时也会对那些"有一定 Java 并发编程基础,想要更深层次了解 Java 并发底层实现"的同学来说,很容易眼前一亮。但是对那些"还没接触过并发编程,只想要了解一下 Java 并发"的同学来说,这第二章直接劝退了,说实话我在刚开始的时候接触这本书,看到第二章我直接垫显示器了。
所以这就是一个选择的问题,这个问题深层次的拷问就是:你到底想给什么样的读者呈现什么样的内容?
然后我们假定第一种情况,即"有一定 Java 并发编程基础,想要更深层次了解 Java 并发底层实现"的这类同学,这类同学看到这里我相信会直接喊出 yyds 这个词,因为这一章真的非常惊艳,能够写出这样的内容得益于方老师百年如一日的坚持和长期在一线打拼的知识积累。第一章和第二章的衔接就像是你刚学会了 1 + 1 = 1,然后就让你论证为什么 1 + 1 = 1 ?
社死了有木有???????
第二章直接带我们上难度,从 volatile 讲到 synchronized ,从对象头讲到锁的升级降级(撤销),从 CAS 讲到 ABA,从原子操作讲到内存屏障,我直呼好家伙!非常惊艳。
但是,第二章对于一些细节的打磨还是差了一些,比如说在锁升级这块的流程图就画的不是那么显而易见,反正我是看了图,然后结合了大量网上的参考才看的略知一二。还有就是方老师上来直接讲应用和底层原理,都没有前戏的吗???volatile 是什么,怎么我认为也应该从一个简单的小例子引出来吧。
然后第三章,切换选手,上来直接全程硬菜,这一章从内存模型入手,讲了 volatile 、final、synchronized 的内存语意,as-if-serial 和 happens-before 原则,Java 内存模型是怎样的以及 JSR-133 对内存模型做了哪些改变,可以说能介绍的都介绍完了。
但是,我又要说但是了,这一章有一些内容应该是从外文网站上翻译出来的,很多地方有些生硬,感觉像是堆砌,不像是在讲课。这种讲解风格我认为不如方老师讲的犀利,能够直接切入重点。这一章我刚开始看的还行,但是到了这一章后半程,明显感觉吃力,不知道是我菜还是怎么着,看着看和明显犯困,不知道手机/电脑前的小伙伴们怎么认为的。
撸完第三章,再看第四章,就感觉有点虐小号的意思,为什么 Java 并发编程基础放在第四章讲??????为什么基础要放在底层实现的后面??????这不是本末倒置吗?如果你是先看目录直接从第四章看起来的倒还好,如果你从第一章慢慢慢慢看到第四章,你很可能会怀疑人生,这是什么破玩意?真的没有搞明白为什么基础要放在第四章才开始讲。而且第四章这部分内容很多都是一带而过,让我不得不怀疑这位选手应该没怎么写过文章,我身边这些公众号主,但凡做的好的,有一些流量的原创号主,都不可能把文章写成这样,大量的代码堆砌,讲解一带而过,这着实没什么用,真的建议作者把《Java并发编程实践》再好好读一读。
看到第五章,我终于明白了没有点 Java 并发基础的话,最好不要看这本书,因为很容易头大。