如何评价《Java 并发编程艺术》这本书?
对于书评这件事情,我其实是不想写的,因为每个人都有自己的一个衡量标准,每个人眼中都有自己的哈姆雷特
,是好是坏每个人都褒贬不一。如果对于书中的知识你都掌握了,你只是想把它作为一种知识串联的记忆体的话,那么你可能感兴趣的事整本书的知识框架和体系脉络,所以如果书中的知识具有连贯性,能够在你脑海中编织出你想要的记忆蓝图,那么我相信它对你来说就没那么好;如果你想把它作为打开新世界的大门,你想了解一下并发编程的奥妙,我相信它对你来说也是一本好书,能够拓展你的知识深度;如果你是面向面试来看它,它也是一本好书,因为绝大多数知识都是面试的常考点。
下面我会从上面的几个假如来带你过一遍这本书。
前置知识
首先先来混个脸熟,我相信大家都不陌生了,上书!!!
首先,这本书是由三个人撰写的,这三位都是阿里人,我用一幅图来说明这三个人都写了哪些内容。
如果是由三个人合力撰写的一本书,如果不能做到对书整体脉络有把控的话,就会陷入聋子听哑巴说瞎子看见鬼了这种逻辑上不能自洽的局面,但是我能从书中看出来,出版社和方老师在对整体知识体系的脉络上面做到了严格把控,但我认为还是差点。
谨言慎行,我会尽量做到以极其客观的角度来解读这本书。
首先第一章并发编程的挑战这个立意非常不错,把整本书所讲的主要内容先引出来,使读者大致了解一下并发编程都会带来哪些问题,然后切入并发编程的痛点,即并发编程的性能瓶颈。
然后第二章直接深入 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 并发基础的话,最好不要看这本书,因为很容易头大。
第六章到第十一章其实讲解的有些过于基础了,如果说这本书是想要带读者深入理解并发的话,书中并没有涉及很多源码,但是对于那些”还没接触过并发编程,只想要了解一下 Java 并发”的同学来说,却是一个了解 Java 并发一个比较好的工具书和参考书,对于那些希望面试背题的同学来说也是一样的。
面试的时候一般会分为四
个阶段来问:
- 你知道 xxx 吗?你用过 xxx 吗?(一问看你有没有接触过,一般没接触过就不会问这个方向了)
- 你在日常开发的过程中是如何使用 xxx 的呢?(再次判断你有没有接触过,如果你能回答上来应用场景,才会继续向下问,不然面试官就认为你在扯皮)
- 那你知道 xxx 的原理吗?(问你原理就是判断你私下来有没有研究过这个东西,可以回答 xxx 的工作机制是怎样的,比如线程池的原理,你就可以回答线程池的工作机制)
- 最后还可能会问你更细一些的问题,比如 HashMap 的 put 过程是怎样的?(这个就需要熟悉源码了)
所以,这本书给大家带来的知识点仅局限于前三点,事实上,从整个行业上来说,我也没有看到哪位作者把源码撸出来写成一本书的,所以这也是我们程序员们努力的方向。
这里,给读者朋友们推荐一下我写的关于并发方面的文章:
有解释,有源码,有案例,是不是要来学习一波
为什么说这本书好?
所以,为什么说这本书好呢?
因为这本书符合我们中国人的调性,毕竟是出自中国人之手,这本书不同于《Java 并发编程实战》,Java 并发编程实战更多注重的是”如何编写一手优秀的并发代码”,而 《Java 并发编程的艺术》更多的是围绕 Java 底层知识来讲解的,他们的侧重点不同。并发编程实战毕竟是外国人写的,它经过翻译的过程会损失掉一些原书的魅力,所以大家尽量还是要看原版书,最好不要穿二手鞋
。
Java 并发编程的艺术还好在比较贴合现如今的面试氛围,大家知道现在面试就是各种八股文一股脑直接冲,这种面试造火箭的面试方式我们大家都嗤之以鼻,但是又无力改变这种现状,所以只能适应,而这本书就是一个让你更好适应八股文面试的一本书。我上面说,这本书有几个章节讲的还是比较不错的,这几个章节搞懂了,基本上相关面试你十拿九稳。但是后面有一些章节比较浅显,需要贴合网上的博客再详细了解。
为什么说这本书不好?
为什么说这本书不好?
我不认可这本书的叙述方式和体系结构,很容易把人给劝退
。我认为这是需要反思的一点。
而且阿里的同学作为业界尤其是 Java 技术栈的顶级程序员,如果不能把自己的技术栈和知识体系的完备性作为最高标准要求自己,那么我们普通程序员还能够相信谁呢?
这本书让我有一种能够离开它但却离不开它的一种感觉。我看《深入理解 Java 虚拟机》的时候,就没有这种情愫
。因为看完周老师的深入理解 JVM 之后,我甚至觉得 《Java 虚拟机规范》你就完全可以扔在一边了。
但是,《Java 并发编程实战》和 《Java 并发编程艺术》其实是一种互补品,缺少哪一本书的知识,我都觉得少点东西。但是只看 Java 并发编程艺术这一本书又不够,所以。。。。。。为什么不再认真打磨一下呢?
所以,希望还能有下一版的《Java 并发编程艺术》,让我们大家一起期待。
文章的最后,给大家推荐一个 github ,https://github.com/crisxuan/bestJavaer 这个 github 是我呕心沥血所有文章的汇总,欢迎 star 。