img
share 分享

Java 9 并发编程实战

作者:[西班牙]哈维尔·费尔南德兹·冈萨雷斯

出版社:人民邮电出版社

ISBN:9787115505866

VIP会员免费 (仅需0.8元/天) ¥ 63.36

温馨提示: 价值40000元的1000本电子书,VIP会员随意看哦!

电子书推荐

更多资源 展开

Java虚拟机并发编程.[美]Venkat Subramaniam(带详细书签).pdf 评分:

快速和廉价的多核硬件驱动着高性能应用的需求,通过充分利用Java平台,你可以把这些优势展现得淋漓尽致。本书是第一本展示现代Java JDK的并发模型、软件事务内存(STM)和基于actor的并发模型三种并发风格的书籍,通过学习本书,你可以为应用程序比较和选择最佳的方案。你将学到这些模型各自的优点,何时以及如何使用它们,以及它们各自的局限性是什么。 本书分为5部分:第一部分:并发策略,阐释了影响并发性的因素、如何实现有效的并发、并发的设计方法等;第二部分:现代Java / JDK并发,讨论了现代Java API的线程安全和效率以及如何处理已有应用程序中的现实问题和重构遗留代码时的原则;第三部分:软件事务内存,深入讨论了STM并就如何在各种主要的JVM语言里使用STM给出了指导意见;第四部分:基于actor的并发,介绍了基于actor模式消除并发问题以及如何在自己的首选语言中使用actor模式;第五部分:尾声,回顾了本书讨论的解决方案并总结了成功使用并发的实用要点。本书介绍了在学习Java并发编程的技巧,可以让你从害怕并发编程到熟练掌握并享受并发编程。你可以使用Java或者你选择的JVM语言(Clojure、JRuby、Groovy或Scala)收获多核硬件不断增长的能量。 图书特色 这是一部优秀的著作!Venkat巧妙地带领我们经历了当今JVM开发人员在多线程编程时所面临的许多设计和实现决策。这本书通过通俗易懂的语言和丰富的例子(使用了当前多种开源工具和JVM语言)使得这个复杂的主题更加一目了然。 —— Albert Scherer 福莱特高等教育集团有限公司电子商务技术部经理 如果JVM是你的首选平台,那么这绝对是你必读的一本书。购买并阅读,然后让你所有的团队成员人手一本。你将顺利找到一条优秀并发问题解决方案之路。 —— Raju Gandhi Integrallis软件有限责任公司高级顾问 这本书非常透彻地阐释了一个极其重要的主题。 —— Chris Richardson CloudFoundry.com创始人 当前计算机领域对新的并发模型和JVM上新语言的兴趣和应用正在逐年递增。Venkat的这本书把二者绑在一起,向一线的开发人员展示了如何构建应用程序,并尽可能地利用现有的库,即使它们是使用不同的语言构建的。 —— Alex Miller Revelytix公司高级工程师 Venkat将引领你进入并发的世界。在开始STM和角色的精彩冒险之旅之前,他教授了Java JDK内置的现代并发工具。我真诚地相信,这本书注定是目前已有的最重要的并发编程书籍之一。Venkat再次做到了这一点! —— Matt Stine AutoZone公司技术架构师 当前并发是一个热门话题,Venkat将带你领略JVM上有效的并发编程技巧和技术。更重要的是,通过比较和对比五种不同的JVM语言中并发编程的方法,你将会开拓视野。 —— Scott Leberknight Near Infinity公司首席架构师 作者简介 Venkat Subramaniam  资深Java技术专家、并发编程专家和敏捷技术专家,拥有超过20年的软件开发经验,在Java领域(整个Java平台)、敏捷开发领域有非常深入的研究,并进行了大量实践。他是Agile Developer公司创始人,在美洲、欧洲和亚洲等多个国家和地区开展培训和指导工作,已经帮助数以千计的软件开发人员成功地在其软件项目中运用敏捷方法。 他经常受邀在大型国际软件会议和用户组活动中发表技术演讲,深受欢迎。他著作颇丰,先后独自撰写了《.NET Gotchas》、《Programming Groovy》、《Programming Scala》等经典著作,尤为值得一提的是,他与人合著的《Practices of an Agile Developer》一书获得了2007年的Jolt生产力大奖。 译者简介 薛笛 资深软件开发工程师,精通分布式系统开发和Java相关技术,对JVM有深入的研究。目前就职于腾讯公司,担任高级开发工程师,负责手机QQ、手机Qzone等应用的后台开发。热衷于技术分享,在《程序员》杂志和IBM Developers Work上发表过多篇技术文章,CSDN博客专家。 图书前言 除了咖啡因,我想没有什么能比写出一段执行速度飞快的代码更能令程序员们兴奋了。然而我们如何才能满足这种对计算速度的渴求呢?诚然,摩尔定律可以帮我们解决部分问题,但多核处理器才代表了未来真正的发展方向。为了能够充分发挥多核处理器的优势,我们每个程序员都应该熟悉并掌握并发编程的技能。 在一个并发程序中,两个或多个动作一般会同时发生。例如,一个并发程序可能需要一边下载多份文件、另一边还要执行一些计算任务以及数据库更新操作。在Java中,我们通常会使用线程来实现并发程序。虽然Java虚拟机在其设计之初就已经在语言层面支持了多线程,但并发编程的方法仍然在不断地进化和完善当中,而这正是我们在本书想要与你分享的内容。 并发编程的难点在于,我们既希望享受并发编程带来的好处,同时又不能让同步问题引火烧身。在JVM上的语言中,启动多个线程是很容易的,但它们彼此之间的执行顺序却是不可预知的。所以很快我们就将投身到一场为了协调线程并使其可以一致地处理数据而进行的战斗中去。 假设我们想要从A点出发快速抵达B点,根据旅行时间有多重要、有哪些可选的交通工具、预算是多少等因素,我们可以选择步行、坐巴士、自驾、坐和谐号或坐飞机飞过去。类似,为了提高Java代码的执行速度,我们同样也有很多选择。在JVM平台上,我们用得最多的一般是下面这三种并发模型: 称为“同步并受罪”的模型 软件事务内存(Software Transactional Memory,STM)模型 基于角色(actor-based)的并发模型 之所以将大家所熟知的JDK同步模型说成是“同步并受罪”,是因为如果我们忘记对共享可变状态进行同步或在错误的层级对其进行同步,所得到的结果将是不可预测的。如果足够幸运的话,我们还能在开发过程中捕获该问题;而如果我们没注意到这些问题,产品发布之后就会暴露出各种古怪且难以定位和重现的问题。而届时我们也无法从这些天杀的代码里找到任何编译错误、警告乃至任何简单的线索。 那些没有对共享可变状态的同步访问进行有效管理的程序本质上都是有问题的,但Java编译器却对此无动于衷。用纯Java对可变性进行编程就仿佛在和整天挑你毛病的丈母娘一起工作那样难受。相信你应该已经体会到这种痛苦了。 当我们撰写并发程序的时候,有如下三种方法可以帮助我们有效避免遇到并发所带来的问题: 在合适的地方进行正确的同步。 不共享状态。 不改变状态。 在使用现代JDK的并发API的时候,我们不得不花费大量精力来保证在合适的层级进行准确的同步。而STM则可以对用户隐藏同步操作并极大地减少出错几率。另一方面,基于角色的模型可以帮助我们避免使用共享状态,而避开共享状态正是我们赢得这场并发战役的秘密武器。 在本书中,我们将采用示例驱动的方法来学习上述三种模型以及如何利用这三种模型来更好地实现并发。 本书的目标读者 本书主要面向那些有一定经验的、正在使用诸如Java、Clojure、Groovy、JRuby和Scala这几种语言并且有兴趣进一步学习如何在JVM上管理和利用并发能力的Java程序员。 如果你是Java新手,那么本书将不会对你学习Java的基础功能有任何帮助。市面上有很多介绍Java编程基础的优秀教程可供选择,你可以先从这些书开始学起。 如果你已经在JVM平台上积累了相当的编程经验,但发觉还需要一些有助于进一步深入了解并发编程的资料,那么本书就是为你准备的。 如果你只对Java和JDK提供的解决方案,即Java线程和并发库感兴趣,那么我推荐你阅读两本非常优秀的专著,即Brian Goetz的《Java Concurrency in Practice》[Goe06]和Doug Lea的《Concurrent Programming in Java》[Lea00]。这两本书在Java内存模型以及如何确保线程安全和一致性方面提供了非常丰富的信息。 本书旨在教会你如何使用JDK提供的方案来解决某些实际的并发问题,当然其中也会包含一些额外的技巧和方法。此外,你还将学到一些有助于更方便地实现隔离可变性的第三方Java库的知识。最后,你还将学到一些通过消除显式锁来降低复杂性和出错概率的类库等方面的内容。 本书意在帮助你学习一些目前已经比较成熟的工具和方法,以便你可以更方便地从中找出最适合解决你当前所面临的并发问题的方案。 本书的主要内容 本书将帮助你学习三种不同的并发解决方案,即现代Java JDK并发模型、软件事务内存(STM)和基于角色的并发模型。 本书主要分为5部分,即并发策略、现代Java/JDK并发模型、软件事务内存、基于角色的并发模型和后记。 在第1章中,我们将讨论是什么使得并发编程如此有用以及并发编程为何如此难以掌握。除此之外,该章还将对上面提到的三种并发模型进行简单介绍。 在深入研究上述三种并发解决方案之前,我们将在第2章先介绍一些影响程序并发性和加速效果的关键因素,并讨论如何实现有效并发的相关策略。 正如将在第3章中讨论的那样,我们采用的设计方法将产生两种截然不同的效果,即要么使我们在并发的海洋里乘风破浪尽情遨游,要么会让我们淹没其中连个水花都看不见。 自Java引入以来,其并发API的演进和增强一直非常迅速。所以第4章我们将讨论如何利用现代Java API来解决线程安全和并发性能问题。 鉴于我们十分渴望避免使用共享可变状态,所以在第5章我们将探讨一些解决现存应用程序实际问题的方法以及一些在重构历史遗留代码时所需要注意的问题。 第6章我们将深入探讨STM,并学习如何使用STM来解决应用程序(特别那些读多写少的应用程序)中绝大部分的并发问题。 第7章我们将学习如何在几个不同的JVM语言中使用STM。 第8章我们将学习到,如果我们依托隔离可变性进行设计,那么基于角色的模型就能够帮助我们彻底解决所有并发问题。 同样,如果你对几种不同的JVM语言都有兴趣,那么你将会在第9章学到如何在你偏爱的语言中使用基于角色的模型。 最后,我们将在第10章回顾本书前面所讨论过的所有解决方案并将其总结为一些简明扼要的知识点来帮助你更好地理解和实践。 并发还是并行 在业界,这两个术语其实并没有很明显差别,不同的人对于二者区别的阐述也都是各执一词(请不要就此问题并发地对他人提问……抑或我应该说不要并行提问)。 我们姑且把二者概念上的争论放到一边,先考虑一些更实际的问题。假设我们有一个运行在单核CPU机器上的多线程应用程序,在公司升级硬件的时候把该程序重新部署到了一台多核CPU的机器上。但其实无论底层硬件的部署方式如何变化,我们的代码本质上还是运行在一个独立的JVM进程上的,所以我们在开发过程中所要考虑问题也都基本相同,即如何创建和管理线程?如何保证数据完整性?如何处理锁和同步?以及我们创建的线程是否在合适的时间跨越内存栅栏?…… 所以不管我们称之为并发也好还是并行也罢,能够真正解决问题才是保证程序正确、高效运行的关键。而这正是本书所关注的重点。 多语言程序员如何使用并发功能 Java这个词在今天已经代表一个平台多过一门编程语言,而带有丰富类库的JVM已经逐渐演变成一个非常强大的平台。但与此同时,Java语言却显得愈发老态龙钟。近些年来,在JVM平台上忽然涌现出了一批有趣且强大的语言,如Clojure、JRuby、Grovvy和Scala。 在这些现代JVM语言中,部分语言如Clojure、JRuby和Groovy都是动态类型的,而其他如Clojure和Scala则深受函数式编程的影响。但这些语言都有一个共同的特点,那就是语法简洁且表达能力强。虽然学习这些语言的语法、范式或区别有一定的门槛,但学成之后我们可以用比Java更少的代码来实现相同的功能。更令人兴奋的是,我们可以将这些JVM语言的代码与Java代码混用,这样我们就成了名副其实的多语言程序员,请参阅附录2中Neal Ford有关“多语言程序员”的论述。 在本书中,我们将学习如何使用java.util.concurrent API,以及如何通过Akka和GPars来使用STM和基于角色的模型。此外,我们还将学习如何在Clojure、Java、JRuby、Groovy和Scala中进行并发编程。如果你已经或打算使用其中任何一种语言,那么本书将会为你介绍在使用这些语言进行并发编程时所需要注意的各种相关事项。 示例和性能测评 虽然本书的大部分示例都是用Java实现的,但是你也会看到很多用Clojure、Groovy、JRuby和Scala实现的示例代码。在这些示例当中,我已尽量消除各语言之间的语法差异并尽可能避开语言专属的习惯用法,其目的主要是让大多数习惯使用Java的程序员更容易阅读和理解用其他语言实现的代码示例。 下面是本书所使用的语言和类库的版本汇总: Akka 1.1.3(http://akka.io/downloads) Clojure 1.2.1(http://clojure.org/downloads) Groovy 1.8(http://groovy.codehaus.org/Download) GPars 0.12(http://gpars.codehaus.org) Java SE 1.6(http://www.java.com/en/download) JRuby 1.6.2(http://jruby.org/download) Scala 2.9.0.1(http://www.scala-lang.org/downloads) 在对不同版本的示例代码的性能进行比较的时候,我会确保比较测试都在相同机器上完成。对于其中大部分示例,我采用的运行环境是搭载2.8GHz英特尔双核处理器、4GB内存并预装了Mac OS X 10.6.6和Java 1.6 update 24的MacBook Pro。而其他部分示例我用的则是搭载8核Sunfire 2.33GHz处理器、8GB内存和预装64位Windows XP和Java 1.6的电脑。 除非另有说明,否则所有示例都是运行在服务器模式下的“Java HotSpot64-Bit Server VM”JVM上。 所有示例全都可以在上面提到过的Mac和Windows机器上编译通过。 在代码示例的清单中,由于篇幅所限,我并没有列出import语句(以及package语句)。当你打算亲自运行代码示例的时候,如果你不确定某个类属于哪个package的话请别担心,因为我已经将完整的代码放到了网站上,你可以通过本书的网站http://pragprog.com/titles/vspcom下载全部示例的源代码。 致谢 有很多人为我完成本书的写作提供了巨大的帮助。这些年来,如果没有那些我所了解和敬重的伟大思想与我的个人思考之间的碰撞所激发出来的灵感,那么本书可能仍然只是我脑海当中的一个念头而已。 首先我想感谢那些阅读了本书草稿并提供宝贵意见的审稿人,是他们使这本书变得更好。但是你在本书中所发现的任何错误则完全都是我的过失。 感谢Brian Goetz(@Brian Goetz)、Alex Miller(@puredanger)和Jonas Bonér(@jboner)几位审稿人,他们所提出的精辟评论使我受益匪浅。本书几乎每一页都被Al cherer(@al_scherer)和Scott Leberknight(@sleberknight)用鹰眼进行了彻底的检查和修订。非常感谢这些先生们。 这里我要特别感谢Raju Gandhi(@looselytyped)、Ramamurthy Gopalakrishnan、Paul King(@paulk_asert)、Kurt Landrus(@koctya)、Ted Neward(@tedneward)、Chris Richardson(@crichardson)、Andreas Rueger、Nathaniel Schutta(@ntschutta)、Ken Sipe (@kensipe)以及Matt Stine(@mstine),感谢他们花费大量宝贵时间帮我校对并给予我鼓励。感谢来自Halloway(@stuarthalloway)的中肯评论,我已经根据他的一些建议对本书进行了改进。 我在各类NFJS会议上所进行的关于并发问题的演讲构成了本书的基本框架内容。所以在此感谢NFJS(@nofluff)主管Jay Zimmerman给我在会议上进行演讲的机会,同时还要感谢与会的各位演讲嘉宾和参与者朋友们,与他们的交流和讨论使我深受启发。 在此要特别要感谢Dave Briccetti(@dcbriccetti)、Frederik De Bleser(@enigmeta)、Andrei Dolganov、Rabea Gransberger、Alex Gout、Simon Sparks、Brian Tarbox、Michael Uren、Dale Visser和Tasos Zervos,以及那些花时间阅读本书beta版并在本书论坛中给予反馈的程序员。此外,Rabea Gransberger那些见解深刻的评论、勘误以及观察评论使我受益匪浅。 感谢那些我在本书所用到的以及在JVM上进行并发应用程序开发所依赖的那些语言和类库的开发者和参与者。 撰写本书的一个额外收获是使我越来越了解审阅本书第1版初稿的策划编辑Steve Peter。他的幽默以及对细节的关注对本书的制作过程起到了极大的帮助。谢谢Steve。很荣幸与本书的责任编辑Brian P. Hogan(@bphogan)共同合作。他上手很快,给了我很多鼓励,同时还在许多需要改进的领域提出了很多建设性的意见和建议。谢谢Brian。 我要感谢整个Pragmatic Bookshelf团队一路以来的辛苦付出和给予我的鼓励。感谢Kim Wimpsett、Susannah Pfalzer(@spfalzer)、Andy Hunt(@pragmaticandy)和Dave Thomas(@pragdave)的帮助和指导,是他们使得成书过程变得如此有趣。 如果没有我妻子的支持,所有这一切都不可能完成,谢谢Kavitha,感谢她为我付出的耐心与牺牲。此外,我从儿子karthik和Krupa那里也得到了很多鼓励,谢谢小伙子们,感谢他们总是好奇地问我是否已经把书写完了。最后,希望正在阅读本书的程序员能够将本书所学的知识更好地应用到未来工作中。谢谢! 上架指导 封底文字 这是一部优秀的著作!Venkat巧妙地带领我们经历了当今JVM开发人员在多线程编程时所面临的许多设计和实现决策。这本书通过通俗易懂的风格和丰富的例子(使用了当前多种开源工具和JVM语言)使得这个复杂的主题更加平易近人。 ——Albert Scherer 福莱特高等教育集团有限公司电子商务技术部经理 如果JVM是你的首选平台,那么这绝对是一本你必读的书。购买并阅读,然后为你所有的团队成员购买一本。你将顺利踏上找到一条优秀并发问题解决方案之路。 ——Raju Gandhi Integrallis软件有限责任公司高级顾问 这本书非常透彻地阐释了一个极其重要的话题。 ——Chris Richardson CloudFoundry.com创始人 当前计算机领域对新的并发模型和JVM上新语言的兴趣和应用正在逐年递增。Venkat的这本书把二者绑在一起,向一线的开发人员展示了如何构建应用程序,并尽可能地利用现有的库,即使它们是使用不同的语言构建的。 ——Alex Miller Revelytix公司高级工程师 Venkat将引导你进入关于并发的世界。在开始STM和角色的精彩冒险之旅之前,他教授了在Java JDK里直接提供的现代并发工具。我真诚地相信,这本书注定是目前已有的最重要的并发编程书籍之一。Venkat再次做到了这一点! ——Matt Stine AutoZone公司技术架构师 当前并发是一个热门话题,Venkat将带领你领略了JVM上有效的并发编程技巧和技术。更重要的是,通过比较和对比五种不同的JVM语言中并发编程的方法,你将会得到更宽广的视野。 ——Scott Leberknight Near Infinity公司首席架构师 译者序 对于Java并发编程领域而言,JDK5的发布绝对具有里程碑式的意义。由该领域大师级人物Doug Lea亲自操刀的新并发API以及重新实现的并发容器使得开发人员摆脱synchronized、notify()、wait()这些原始的同步原语,为并发应用的开发提供了巨大的便利和性能提升,使Java并发编程前进到新的阶段。时过境迁,这几年来,虽然没有再出现类似于新并发API这样惊世骇俗的产品,但随着Java平台的不断演进,尤其在JVM开放了对动态语言的支持之后,一些新的语言及其背后所蕴含的设计方法和编程模型也被引入JVM,而这些新的设计方法和编程模型也深刻地影响着JVM并发编程领域的发展。 但是,出于对新语言的学习门槛、稳定性、性能、系统切换和维护成本等方面的顾虑,互联网企业,尤其是国内的大多数企业对这些新语言、新技术都持比较保守的态度,所以在国内我们很难接触到由这些新语言所引领的JVM并发编程的最新成果。当我们打开满是灰尘的并发编程工具箱,发现里面还是2007年起就一直在用的并发API,虽然用多了也感觉很顺手,但这些真的已经足够了吗? 本书为我们推开了一扇通往并发编程新领域的大门。作者以演讲般娓娓道来的方式告诉我们,其实我们一直都被共享可变性设计的缺陷折磨着却不自知。而我们仿佛是《黑客帝国》电影里生活的人们一样,在服下那粒可以看透真相的小药丸之前,总以为世界就应该是自己所熟悉的样子。再回到JVM并发编程领域,正是由于新的并发API太过成功,以致很多人已经形成了以新并发API为基础、以共享可变性设计为核心的固有套路和思维定式,认为这种方式所带来的饥饿、死锁、竞争条件等问题是并发编程固有的复杂性,从而隐忍和压抑着心中为解决这些问题而遭受的痛苦。从这个角度来说,作者很像《黑客帝国》中引领救世主Neo走出Matrix虚幻世界的导师墨菲斯,而本书就是那粒小药丸,吃了之后就可以看到JVM并发编程领域中不一样的风光,同时会感叹:哇哦,原来还有这么多新玩法! 相对于其他讲述并发编程的书籍,本书的亮点在于: 理论叙述深入浅出。由于作者是一位出色的演讲者,所以本书的理论部分也大量运用了例证、类比等叙述手段,使得原本枯燥、生涩的理论叙述变得生动鲜活,从而更易于读者理解和接受。 实践内容极具实用性。本书的内容涵盖了当前流行且成熟的多种JVM并发编程解决方案,包括Java7 Fork-Join API、STM、基于角色的模型,并且在每叙述完一种新模型之后都会有独立的一章专门用于展示前章所述模型在Clojure、Groovy、Java、JRuby和Scala中的用法和注意事项,有助于使用不同语言的读者都能找到相应的解决方案。虽然Java才是本书绝大多数国内读者的工作语言,但是上述几种语言对于本书所述的并发模型的支持方面可谓各胜擅长,有很多在Java中实现起来语法很繁琐的模型在其他语言中可能几行代码就可以完成。所以,了解一下其他语言简洁优雅的实现方式,也不失为开阔眼界的好素材,以后再有类似需求的时候也可以多一种选择。 这里我要感谢本书的策划编辑杨福川,是他让我有机会参与本书的翻译工作,他的认可和鼓励为我完成本书的翻译提供了强大的助力。我还要感谢本书的责任编辑,他严谨、细致的专业态度让我受益匪浅。最后,我要感谢我的老婆璐璐,译书的这段时间里,我经常在电脑前敲键盘而无暇陪伴,感谢老婆的理解与支持。 本书所讲述的内容并不艰涩,领域也属我比较擅长的范畴,但想要将这位爱举例子的作者那很口语化、有点絮叨并且语法不那么严谨的英文转换成流畅且符合国人阅读习惯的文字着实不易。所以,虽然我很希望能够在人生第一部译作中力求完美,呈现给大家一部“很好读”的书,但终因时间和精力有限,译稿可能存在一些疏漏和翻译生硬之处,恳请各位读者批评指正。 图书目录 译者序 前言 第1章 并发的威力与风险 1 1.1 线程:程序的执行流程 1 1.2 并发的威力 1 1.3 并发的风险 4 1.4 小结 9 第一部分 并发策略 第2章 分工原则 11 2.1 从顺序到并发 11 2.2 在IO密集型应用程序中使用并发技术 13 2.3 并发方法对IO密集型应用程序的加速效果 19 2.4 在计算密集型应用程序中使用并发技术 20 2.5 并发方法对于计算密集型应用程序的加速效果 25 2.6 有效的并发策略 26 2.7 小结 27 第3章 设计方法 28 3.1 处理状态 28 3.2 探寻设计选项 29 3.3 共享可变性设计 29 3.4 隔离可变性设计 30 3.5 纯粹不可变性设计 30 3.6 持久的/不可变的数据结构 31 3.7 选择一种设计方法 34 3.8 小结 34 第二部分 现代Java/JDK并发模型 第4章 可扩展性和线程安全 37 4.1 用ExecutorService管理线程 37 4.2 使线程协作 38 4.3 数据交换 47 4.4 Java 7 Fork-Join API 49 4.5 可扩展集合类 51 4.6 Lock和Synchronized 54 4.7 小结 58 第5章 驯服共享可变性 59 5.1 共享可变性 != Public 59 5.2 定位并发问题 59 5.3 保持不变式 61 5.4 管理好资源 62 5.5 保证可见性 64 5.6 增强并发性 65 5.7 保证原子性 67 5.8 小结 70 第三部分 软件事务内存 第6章 软件事务内存导论 71 6.1 同步与并发水火不容 71 6.2 对象模型的缺陷 72 6.3 将实体与状态分离 73 6.4 软件事务内存 74 6.5 STM中的事务 77 6.6 用STM实现并发 77 6.7 用Akka/Multiverse STM实现并发 82 6.8 创建事务 84 6.9 创建嵌套事务 90 6.10 配置Akka事务 97 6.11 阻塞事务—有意识地等待 100 6.12 提交和回滚事件 103 6.13 集合与事务 106 6.14 处理写偏斜异常 110 6.15 STM的局限性 112 6.16 小结 116 第7章 在Clojure、Groovy、Java、JRuby和Scala中使用STM 117 7.1 Clojure STM 117 7.2 Groovy集成 118 7.3 Java集成 122 7.4 JRuby集成 124 7.5 Scala中的可选方案 130 7.6 小结 133 第四部分 基于角色的并发模型 第8章 讨喜的隔离可变性 135 8.1 用角色实现隔离可变性 136 8.2 角色的特性 137 8.3 创建角色 138 8.4 收发消息 144 8.5 同时使用多个角色 148 8.6 多角色协作 152 8.7 使用类型化角色 159 8.8 类型化角色和murmurs 163 8.9 混合使用角色和STM 169 8.10 使用transactor 169 8.11 调和类型化角色 176 8.12 远程角色 182 8.13 基于角色模型的局限性 184 8.14 小结 184 第9章 在Groovy、Java、JRuby和Scala中使用角色 186 9.1 在Groovy中使用GPars提供的角色实现 186 9.2 在Java中使用Akka提供的角色实现 199 9.3 在JRuby中使用Akka提供的Actor实现 199 9.4 在Scala中使用角色 202 9.5 小结 202 第五部分 后记 第10章 并发编程之禅 205 10.1 慎重选择 205 10.2 并发:程序员指南 206 10.3 并发:架构师指南 207 10.4 明智地进行选择 208 附录1 Clojure agent 210 附录2 一些网络资源 214 参考文献 216

...展开详情
上传时间:2018-04 大小:24.21MB
热门图书