Java并发编程实践-教你轻松学习Java多线程.docVIP

Java并发编程实践-教你轻松学习Java多线程.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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改为线程安全,再通过委托,强化为性能更猛的缓存

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档