如何评价《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 。
如何评价《Java 并发编程艺术》这本书?的更多相关文章
- 【java并发编程艺术学习】(一)初衷、感想与笔记目录
不忘初心,方得始终. 学习java编程这么长时间,自认为在项目功能需求开发中没啥问题,但是之前的几次面试和跟一些勤奋的或者小牛.大牛级别的人的接触中,才发现自己的无知与浅薄. 学习总得有个方向吧,现阶 ...
- 【java并发编程艺术学习】(二)第一章 java并发编程的挑战
章节介绍 主要介绍并发编程时间中可能遇到的问题,以及如何解决. 主要问题 1.上下文切换问题 时间片是cpu分配给每个线程的时间,时间片非常短. cpu通过时间片分配算法来循环执行任务,当前任务执行一 ...
- 【java并发编程艺术学习】(三)第二章 java并发机制的底层实现原理 学习记录(一) volatile
章节介绍 这一章节主要学习java并发机制的底层实现原理.主要学习volatile.synchronized和原子操作的实现原理.Java中的大部分容器和框架都依赖于此. Java代码 ==经过编译= ...
- java并发编程艺术
cas算法 概要 刚开始看这本书的时候很经常看到cas算法,个人觉得cas算法在并发编程中也是挺重要的的一部分,cas是比较并交换的意思(compare and swap),campareAndSwa ...
- Java并发编程艺术读书笔记
1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...
- 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习
章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...
- 【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized
章节介绍 本章节主要学习 Java SE 1.6 中为了减少获得锁 和 释放锁 时带来的性能消耗 而引入的偏向锁 和 轻量级锁,以及锁的存储结构 和 升级过程. synchronized实现同步的基础 ...
- Java并发编程总结(一)Syncronized解析
Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...
- Java并发编程基础三板斧之Semaphore
引言 最近可以进行个税申报了,还没有申报的同学可以赶紧去试试哦.不过我反正是从上午到下午一直都没有成功的进行申报,一进行申报 就返回"当前访问人数过多,请稍后再试".为什么有些人就 ...
随机推荐
- API安全综述
API安全综述 译自:An Overview on API Security. 本文概括了API防护有关的方方面面,从上层视角介绍了API防护中主要注意的点,并给出了相应的建议.本文可以作为一个API ...
- AvtiveMQ与SpringBoot结合
首先来了解下ActivieMQ的应用场景,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构是大型分布式系统不可缺少的中间件 ...
- iOS 针对txt文档进行解码
如我上一篇文章记录,我加了打开其他APPtxt文件的小功能,紧接着碰到新问题了,我在测试过程中发现用户上传的TXT编码格式很多不单单是utf-8和gb2312,针对TXT文档进行解码,我一共经历过两个 ...
- Linux:linux下解压*压缩tar.xz、tar、tar.gz、tar.bz2、tar.Z、rar、zip、war等文件方法
tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 ------------------------------------------ 这 ...
- Linux安装mysql5.7版本
1.linux安装mysql5.7顺序 ①mysqladmin –version 查看版本号 ②mysql5.7安装在linux中需要先初始化 Mysqld –initialize –user=mys ...
- mysql中,一个数字加上null,结果为null
在mysql中,一个数字加上null,结果为null. 这个问题是我用update语句时遇见的,就像下边的例子 update tableName set number = number + x 这里的 ...
- java二叉树的遍历(1)
树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...
- HMAC简介及HMAC-SHA256实现Demo
一.什么是HMAC HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC中的H就是Hash的意思. HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HM ...
- 选择适合入门的自动化测试框架TestNG 基于Java语言的入门选择之一
对于测试工程师新手来说,最痛苦的莫过于入门,其实只要入门3个月左右,对于自动化测试,所有的测试工程师除了喜爱,就是更爱.自动化测试工作,是从根本上解放人性,不用重复去完成鼠标的点点点,例如以下测试常常 ...
- C语言:进制转化
16进制数4321转10进制:原来方法 =4*16^3+3*16^2+2*16^1+1*16^0 =4*16^3+3*16^2+2*16^1+1 =16*(4*16^2+3*16^1+2)+1 =16 ...