- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java并发编程实践:教你轻松学习Java多线程
最近一段时间,我对《Java并发编程实践》这本经典而又有些难懂的书籍,尝试用了一些简单有趣、通俗易懂的方式进行解读,现整理成GitBook(文末有链接),方便大家阅读。
为什么要解读这本书
因为这是一本经典却又难懂的书。
这本书的经典我想不必多讲了,几乎所有想学习Java并发的同学,都会被推荐去看这本书(虽然他们中的大多数在看了不到三分之一之后就放弃了),作为一本书籍,最重要的是系统性和准确性,这本书涵盖了Java并发中几乎所有基础知识点,并且大
多数章节都配有实际案例,是一本非常值得收藏的Java并发参考手册。
那么为什么说这本书难懂呢?
总的来说有以下几点:
理论过多。举个例子,书中第五章,在讲Java并发的一些基础构建模块时(ConcurrentHashMap、CopyOnWriteArrayList、Future这些),前面用了很多篇幅讲这些类的理论知识,到章节最后才用一个实际案例将这些知识串起来,而很多读者在看前
面那些枯燥乏味的理论性讲解时,就已经消耗了太多意志力,导致最后根本没精力看最后的案例;
有点跳跃。书中对一些知识点的讲解,并没有完全讲透,有些只是一笔带过,读者看到难免就会心里好多个疑问,然后就试图通过上下文去理解作者的意思,最后又消耗了大量意志力,导致最终的弃读;
中文翻译别扭。这是很多经典技术书籍的通病了,本身这本书就很难懂,翻译的别扭,就更难懂了。
针对上面这些问题,我采用了以下方式进行解读:
用讲故事的方式进行讲解。让文章兼具知识性和娱乐性,让读者阅读时不会感到枯燥;
先案例后理论。我把书中放在章节最后的案例,挪到了文章的开头,让读者先对知识有了大概的了解,同时引发读者的好奇心,在看文章后面的偏理论解读的时候,不会昏昏欲睡;
不局限于书籍本身。和大多数读者一样,我在看这本书的时候,也经常会卡壳,然后翻寻上下文,依旧百思不得其解。这时候就需要用到搜索引擎了,所以你经常会在我的文章末尾看到除了《Java并发编程实践》以外的其他参考文献;
必要时看原著。上面说了,有些段落的中文翻译实在看着别扭,这时候就需要看回原著,看看作者自己是如何表述的。
解读脉络
我这次解读的内容,也许只包含了Java并发中20%的知识,但这20%的知识,已经足以涵盖平时80%的使用场景。下面简单梳理一下这份解读的脉络。
1、为什么要使用线程池
首先,你学习Java多线程,得知道为什么要使用多线程吧?干嘛不老老实实使用单线程呢?这部分比较简单,书里讲的也很清楚,网上一搜资料也一大把,所以这部分不作解读 ( ̄ ̄)~
2、如何写出线程不安全的代码
好,现在你知道为什么要学Java多线程了。
那么当我们谈学习多线程时,我们是在谈学习什么呢?谈如何创建线程吗?不是,多线程里的大多数知识,都是在讲如何在多线程的环境下,保证代码的线程安全性,所以,接下来,你要了解,如何写出线程不安全的代码,知道什么样的代码是线程不安
全的,你才会去想如何才能让它线程安全。
3、两个最基础的关键字
现在你写出了线程不安全的代码,是时候想想要怎样把它们变成线程安全的了。
在Java中,实现线程安全,最最基础的就是两个关键字,volatile和synchronize。
volatile用的比较少,但是通过对它的学习,你可以了解Java内存模型,学会透过JVM去看线程问题,这是一个思考范式的提升: Volatile趣谈——我是怎么把贝克汉姆的进球弄丢的
synchronize,无需多言,不管是我们自己写的代码,还是JDK里的各个线程安全类,如ConcurrentHashMap,HashTable,大多都是利用synchronize来实现的线程安全:如何用一句话介绍synchronize的内涵
4、学会委托
学会了volatile和synchronize,以后就可以靠着两兄弟打遍天下无敌手了?
理论上可行,不过就像那句话说的,拿着锤子的人,看谁都是钉子。要想建一栋大楼,我们不能只有锤子,我们还需要起重机。Java就给了我们很多牛哄哄的起重机,比如ConcurrentHashMap,想想看,每次你想让你的Map线程安全,都要自己手动加上
synchronize,这多麻烦,有了ConcurrentHashMap,我们只要把线程安全的重任,委托给它去实现就ok了。
Java中可以被委托的类还有很多,大体上分为三类,同步容器、并发容器和同步工具类,我的解读,也是通过一个简单的缓存案例,展示了如何把一个原本线程不安全的代码,通过synchronize改为线程安全,再通过委托,强化为性能更猛的缓存
您可能关注的文档
最近下载
- 中华人民共和国国歌-教案.doc VIP
- 2025年高考(全国一卷)数学试题和答案.docx VIP
- 离散数学答案(刘玉珍_编着).doc VIP
- 人民版六年级《劳动》上册全套教学课件.pptx
- 《城市规划原理》第3章 城乡规划体制.ppt VIP
- 基于SOR理论的社交网络互动对旅游行为的影响.docx VIP
- 哈曼JBL Live 770NC 无线罩耳式自适应降噪耳机 配置指南 (中国)说明书用户手册.pdf
- 《城市规划原理》第3章城乡规划体制.pptx
- 2025年最新的BRCGS包装材料全球标准第7版全套管理手册及程序文件.docx VIP
- 激光原理及应用陈家璧主编习题解答.pdf VIP
文档评论(0)