如何评价《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
引言 最近可以进行个税申报了,还没有申报的同学可以赶紧去试试哦.不过我反正是从上午到下午一直都没有成功的进行申报,一进行申报 就返回"当前访问人数过多,请稍后再试".为什么有些人就 ...
随机推荐
- SpringCloud Alibaba实战(11:引入服务网关Gateway)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是三分恶. 在前面的章节中,我们已经完成了服务间的调用.统一配置等等,在这 ...
- BFS经典面试题——C++版
文章目录 蛇梯棋 单词接龙 青蛙过河 蛇梯棋 N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向. 例如,一块 6 x 6 大小的棋盘,编号 ...
- Web自动化之iframe切换
一.如何判断元素是否在iframe中 选中要操作的元素,通过下方的父节点查看是否存在iframe,存在则元素在iframe,需要切换至iframe中进行元素的操作 二.iframe切换方式一 1.方式 ...
- Centos7中安装elasticsearch
第一步:必须要有jre支持 elasticsearch是用Java实现的,跑elasticsearch必须要有jre支持,所以必须先安装jre 第二步:下载elasticsearch 进入官方下载 h ...
- Centos7 yum安装 MySQL5.7.25
扩展:在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum ...
- php漏洞 sha1函数
0x01: 绕过技巧是传入的是数组时,会报错,返回为NULL,当传入的两个参数都是数组直接相等
- HAL库直流电机编码测速(L298N驱动)笔记
主函数开始后的处理流程: 1.外设初始化:HAL_Init() 2.系统时钟配置 RCC振荡器初始化:HAL_RCC_OsConfig() RCC时钟初始化:HAL_RCC_ClockConfig() ...
- C语言:虚拟地址 和编译模式
所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围.虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响.这节我们先讲解CPU,再讲解编 ...
- C语言中函数的返回值
规则 除局部变量的内存地址不能作为函数的返回值外,其他类型的局部变量都能作为函数的返回值. 我总结出下面这些规则: int.char等数据类型的局部变量可以作为函数返回值. 在函数中声明的指针可以作为 ...
- Python语言对Json对象进行新增替换操作
# Json字符串进行新增操作import jsonimport os# os.path.dirname(__file__):表示当前目录path = os.path.join(os.path.dir ...