華章專業(yè)開發(fā)者叢書·Java并發(fā)編程實(shí)戰(zhàn) [Java Concurrency in Practice]

2021-04-27 14:48 更新

華章專業(yè)開發(fā)者叢書·Java并發(fā)編程實(shí)戰(zhàn) [Java Concurrency in Practice]

[美] Brian Goetz 等 著,童云蘭 等 譯

  • 出版社: 機(jī)械工業(yè)出版社
  • ISBN:9787111370048
  • 版次:1
  • 商品編碼:10922250
  • 品牌:機(jī)工出版
  • 包裝:平裝
  • 叢書名: 華章專業(yè)開發(fā)者叢書
  • 外文名稱:Java Concurrency in Practice
  • 開本:16開
  • 出版時(shí)間:2012-02-01
  • 用紙:膠版紙
  • 頁(yè)數(shù):312


點(diǎn)此購(gòu)買

編輯推薦

適讀人群 :有Java開發(fā)經(jīng)驗(yàn)的開發(fā)者。

十年暢銷100000冊(cè),Java并發(fā)編程經(jīng)典圖書。本書不僅講解了并發(fā)的理論基礎(chǔ),還介紹了各種實(shí)際的開發(fā)技術(shù)。書中并不是簡(jiǎn)單羅列出各種并發(fā)API及機(jī)制,而是詳細(xì)介紹了許多設(shè)計(jì)原則、設(shè)計(jì)模式及思維模式,可幫助開發(fā)人員構(gòu)建出正確的、高性能的并發(fā)程序。


內(nèi)容簡(jiǎn)介

  《Java并發(fā)編程實(shí)戰(zhàn)》深入淺出地介紹了Java線程和并發(fā),是一本完美的Java并發(fā)參考手冊(cè)。書中從并發(fā)性和線程安全性的基本概念出發(fā),介紹了如何使用類庫(kù)提供的基本并發(fā)構(gòu)建塊,用于避免并發(fā)危險(xiǎn)、構(gòu)造線程安全的類及驗(yàn)證線程安全的規(guī)則,如何將小的線程安全類組合成更大的線程安全類,如何利用線程來(lái)提高并發(fā)應(yīng)用程序的吞吐量,如何識(shí)別可并行執(zhí)行的任務(wù),如何提高單線程子系統(tǒng)的響應(yīng)性,如何確保并發(fā)程序執(zhí)行預(yù)期任務(wù),如何提高并發(fā)代碼的性能和可伸縮性等內(nèi)容,最后介紹了一些高級(jí)主題,如顯式鎖、原子變量、非阻塞算法以及如何開發(fā)自定義的同步工具類。

  《Java并發(fā)編程實(shí)戰(zhàn)》適合Java程序開發(fā)人員閱讀。

本書涵蓋的內(nèi)容包括:

? 并發(fā)性與線程安全性的基本概念

? 構(gòu)建以及組合各種線程安全類的技術(shù)

? 使用java.util.concurrent包中的各種并發(fā)構(gòu)建基礎(chǔ)模塊

? 性能優(yōu)化中的注意事項(xiàng)

? 如何測(cè)試并發(fā)程序

? 以及一些高級(jí)主題,包括原子變量,無(wú)阻塞算法以及Java內(nèi)存模型


作者簡(jiǎn)介

  《Java并發(fā)編程實(shí)戰(zhàn)》作者都是Java Community Process JSR 166專家組(并發(fā)工具)的主要成員,并在其他很多JCP專家組里任職。Brian Goetz有20多年的軟件咨詢行業(yè)經(jīng)驗(yàn),并著有至少75篇關(guān)于Java開發(fā)的文章。Tim Peierls是“現(xiàn)代多處理器”的典范,他在BoxPop.biz、唱片藝術(shù)和戲劇表演方面也頗有研究。Joseph Bowbeer是一個(gè)Java ME專家,他對(duì)并發(fā)編程的興趣始于Apollo計(jì)算機(jī)時(shí)代。David Holmes是《The Java Programming Language》一書的合著者,任職于Sun公司。Joshua Bloch是Google公司的首席Java架構(gòu)師,《Effective Java》一書的作者,并參與著作了《Java Puzzlers》。Doug Lea是《Concurrent Programming》一書的作者,紐約州立大學(xué) Oswego分校的計(jì)算機(jī)科學(xué)教授。


精彩書評(píng)

  “我曾有幸在一個(gè)偉大的團(tuán)隊(duì)中工作,參與設(shè)計(jì)和實(shí)現(xiàn)在Java 5.0和Java 6等平臺(tái)中新增的并發(fā)功能?,F(xiàn)在,仍然是這個(gè)團(tuán)隊(duì),將透徹地講解這些新功能,以及關(guān)于并發(fā)的一般性概念。并發(fā)已不再只是高級(jí)用戶談?wù)摰脑掝},每一位Java開發(fā)人員都應(yīng)該閱讀這本書。”

  ——Martin Buchholz,Sun公司的JDK并發(fā)大師

  “在過(guò)去30多年時(shí)間里,計(jì)算機(jī)性能一直遵循著摩爾定律,但從現(xiàn)在開始,它將遵循Amdahl定律。編寫能高效利用多處理器的代碼非常具有挑戰(zhàn)性。 在這本書中介紹的一些概念和技術(shù),對(duì)于在當(dāng)前(以及未來(lái)的)系統(tǒng)上編寫安全的和可伸縮的代碼來(lái)說(shuō)都是非常有用的?!?/p>

  ——Doron Rajwan,Intel公司研究人員

  “如果你正在編寫、設(shè)計(jì)、調(diào)試、維護(hù)以及分析多線程的Java程序,那么本書正是你所需要的。如果你曾對(duì)某個(gè)方法進(jìn)行過(guò)同步,但卻不理解其中的原因,那么你以及你的用戶都有必要從頭至尾仔細(xì)地讀一讀這本書?!?/p>

  ——Ted Neward,《Effective Enterprise Java》的作者

  “Brian非常清晰地闡述了并發(fā)的一些基本問(wèn)題與復(fù)雜性。對(duì)于使用線程并關(guān)注程序執(zhí)行性能的開發(fā)人員來(lái)說(shuō),這是一本必讀的書?!?/p>

  ——Kirk Pepperdine,JavaPerformanceTuning.com網(wǎng)站CTO

  “本書深入淺出地介紹了一些復(fù)雜的編程主題,是一本完美的Java并發(fā)參考手冊(cè)。書中的每一頁(yè)都包含了程序員日常需要應(yīng)對(duì)的問(wèn)題(以及相應(yīng)的解決方案)。隨著摩爾定律的發(fā)展趨勢(shì)由提高處理器核的速度轉(zhuǎn)向增加處理器核的數(shù)量,如何有效地利用并發(fā)性已變得越來(lái)越重要,本書正好介紹了這些方面的內(nèi)容?!?/p>

  ——Cliff Click博士,Azul Systems公司高級(jí)軟件工程師

  “我對(duì)并發(fā)有著濃厚的興趣,并且與大多數(shù)程序員相比,我或許寫過(guò)更多存在線程死鎖的代碼,也在同步上犯了更多的錯(cuò)誤。在介紹Java線程和并發(fā)等主題的眾多書籍中,Brian的這本書頗具可讀性,它通過(guò)循序漸進(jìn)的方式將一些復(fù)雜的主題闡述得很清楚。我將本書推薦給Java Specialists Newsletter的所有讀者,因?yàn)樗粌H有趣,而且很有用,它介紹了當(dāng)前Java開發(fā)人員正在面對(duì)的許多問(wèn)題?!?/p>

  ——Heinz Kabutz博士,Java Specialists Newsletter的維護(hù)者

  “我一直努力想使一些簡(jiǎn)單的問(wèn)題變得更簡(jiǎn)單,然而本書已經(jīng)簡(jiǎn)化了一個(gè)復(fù)雜但卻關(guān)鍵的主題:并發(fā)。這本書采用了創(chuàng)新的講解方法、簡(jiǎn)單明了的風(fēng)格,它注定會(huì)成為一本非常重要的書。

  ——Bruce Tate,《Beyond Java》的作者

  這本書為Java開發(fā)人員在線程編程領(lǐng)域提供了不可多得的知識(shí)。我在讀這本書時(shí)受到了極大的啟發(fā),部分原因在于它詳細(xì)地介紹了Java中并發(fā)領(lǐng)域的API,但更重要的卻在于這本書以一種透徹并且易懂的方式來(lái)介紹復(fù)雜的并發(fā)知識(shí),這是其他書籍很難媲美的。

  ——Bill Venners,《Inside the Java Virtual Machine》的作者


目錄

對(duì)本書的贊譽(yù)
譯者序
前 言
第1章 簡(jiǎn)介
1.1 并發(fā)簡(jiǎn)史
1.2 線程的優(yōu)勢(shì)
1.2.1 發(fā)揮多處理器的強(qiáng)大能力
1.2.2 建模的簡(jiǎn)單性
1.2.3 異步事件的簡(jiǎn)化處理
1.2.4 響應(yīng)更靈敏的用戶界面
1.3 線程帶來(lái)的風(fēng)險(xiǎn)
1.3.1 安全性問(wèn)題
1.3.2 活躍性問(wèn)題
1.3.3 性能問(wèn)題
1.4 線程無(wú)處不在
第一部分 基礎(chǔ)知識(shí)
第2章 線程安全性
2.1 什么是線程安全性
2.2 原子性
2.2.1 競(jìng)態(tài)條件
2.2.2 示例:延遲初始化中的競(jìng)態(tài)條件
2.2.3 復(fù)合操作
2.3 加鎖機(jī)制
2.3.1 內(nèi)置鎖
2.3.2 重入
2.4 用鎖來(lái)保護(hù)狀態(tài)
2.5 活躍性與性能
第3章 對(duì)象的共享
3.1 可見性
3.1.1 失效數(shù)據(jù)
3.1.2 非原子的64位操作
3.1.3 加鎖與可見性
3.1.4 Volatile變量
3.2 發(fā)布與逸出
3.3 線程封閉
3.3.1 Ad-hoc線程封閉
3.3.2 棧封閉
3.3.3 ThreadLocal類
3.4 不變性
3.4.1 Final域
3.4.2 示例:使用Volatile類型來(lái)發(fā)布不可變對(duì)象
3.5 安全發(fā)布
3.5.1 不正確的發(fā)布:正確的對(duì)象被破壞
3.5.2  不可變對(duì)象與初始化安全性
3.5.3 安全發(fā)布的常用模式
3.5.4 事實(shí)不可變對(duì)象
3.5.5 可變對(duì)象
3.5.6 安全地共享對(duì)象
第4章 對(duì)象的組合
4.1 設(shè)計(jì)線程安全的類
4.1.1 收集同步需求
4.1.2 依賴狀態(tài)的操作
4.1.3 狀態(tài)的所有權(quán)
4.2 實(shí)例封閉
4.2.1 Java監(jiān)視器模式
4.2.2 示例:車輛追蹤
4.3 線程安全性的委托
4.3.1 示例:基于委托的車輛追蹤器
4.3.2 獨(dú)立的狀態(tài)變量
4.3.3 當(dāng)委托失效時(shí)
4.3.4 發(fā)布底層的狀態(tài)變量
4.3.5 示例:發(fā)布狀態(tài)的車輛追蹤器
4.4 在現(xiàn)有的線程安全類中添加功能
4.4.1 客戶端加鎖機(jī)制
4.4.2 組合
4.5 將同步策略文檔化
第5章 基礎(chǔ)構(gòu)建模塊
5.1 同步容器類
5.1.1 同步容器類的問(wèn)題
5.1.2 迭代器與Concurrent-ModificationException
5.1.3 隱藏迭代器
5.2 并發(fā)容器
5.2.1 ConcurrentHashMap
5.2.2 額外的原子Map操作
5.2.3 CopyOnWriteArrayList
5.3 阻塞隊(duì)列和生產(chǎn)者-消費(fèi)者模式
5.3.1 示例:桌面搜索
5.3.2 串行線程封閉
5.3.3 雙端隊(duì)列與工作密取
5.4 阻塞方法與中斷方法
5.5 同步工具類
5.5.1 閉鎖
5.5.2 FutureTask
5.5.3 信號(hào)量
5.5.4 柵欄
5.6 構(gòu)建高效且可伸縮的結(jié)果緩存
第二部分 結(jié)構(gòu)化并發(fā)應(yīng)用程序
第6章 任務(wù)執(zhí)行
6.1 在線程中執(zhí)行任務(wù)
6.1.1 串行地執(zhí)行任務(wù)
6.1.2 顯式地為任務(wù)創(chuàng)建線程
6.1.3 無(wú)限制創(chuàng)建線程的不足
6.2 Executor框架
6.2.1 示例:基于Executor的Web服務(wù)器
6.2.2 執(zhí)行策略
6.2.3 線程池
6.2.4 Executor的生命周期
6.2.5 延遲任務(wù)與周期任務(wù)
6.3 找出可利用的并行性
6.3.1 示例:串行的頁(yè)面渲染器
6.3.2 攜帶結(jié)果的任務(wù)Callable與Future
6.3.3 示例:使用Future實(shí)現(xiàn)頁(yè)面渲染器
6.3.4 在異構(gòu)任務(wù)并行化中存在的局限
6.3.5 CompletionService:Executor與BlockingQueue
6.3.6 示例:使用CompletionService實(shí)現(xiàn)頁(yè)面渲染器
6.3.7 為任務(wù)設(shè)置時(shí)限
6.3.8 示例:旅行預(yù)定門戶網(wǎng)站
第7章 取消與關(guān)閉
第8章 線程池的使用
第9章 圖形用戶界面應(yīng)用程序
第三部分 活躍性、性能與測(cè)試
第10章 避免活躍性危險(xiǎn)
第11章 性能與可伸縮性
第12章 并發(fā)程序的測(cè)試
第四部分 高級(jí)主題
第13章 顯式鎖
第14章 構(gòu)建自定義的同步工具
第15章 原子變量與非阻塞同步機(jī)制
第16章 Java內(nèi)存模型
附錄A 并發(fā)性標(biāo)注
參考文獻(xiàn)

精彩書摘

并發(fā)編程是Java語(yǔ)言的重要特性之一,在Java平臺(tái)上提供了許多基本的并發(fā)功能來(lái)輔助開發(fā)多線程應(yīng)用程序。然而,這些相對(duì)底層的并發(fā)功能與上層應(yīng)用程序的并發(fā)語(yǔ)義之間并不存在一種簡(jiǎn)單而直觀的映射關(guān)系。因此,如何在Java并發(fā)應(yīng)用程序中正確且高效地使用這些功能就成了Java開發(fā)人員的關(guān)注重點(diǎn)。本書正是為了解決這個(gè)問(wèn)題而寫的。書中采用循序漸進(jìn)的講解方式,從并發(fā)編程的基本理論入手,逐步介紹了在設(shè)計(jì)Java并發(fā)程序時(shí)各種重要的設(shè)計(jì)原則、設(shè)計(jì)模式以及思維模式,同時(shí)輔以豐富的示例代碼作為對(duì)照和補(bǔ)充,使得開發(fā)人員能夠更快地領(lǐng)悟Java并發(fā)編程的要領(lǐng),圍繞著Java平臺(tái)的基礎(chǔ)并發(fā)功能快速地構(gòu)建大規(guī)模的并發(fā)應(yīng)用程序。全書內(nèi)容由淺入深,共分為四個(gè)部分。第一部分介紹了Java并發(fā)編程的基礎(chǔ)理論,包括線程安全性與狀態(tài)對(duì)象的基礎(chǔ)知識(shí),如何構(gòu)造線程安全的類并將多個(gè)小型的線程安全類構(gòu)建成更大型的線程安全類,以及Java平臺(tái)庫(kù)中的一些基礎(chǔ)并發(fā)模塊;第二部分介紹了并發(fā)應(yīng)用程序的構(gòu)造理論,包括應(yīng)用程序中并行語(yǔ)義的分解及其與邏輯任務(wù)的映射,任務(wù)的取消與關(guān)閉等行為的實(shí)現(xiàn),以及Java線程池中的一些高級(jí)功能,此外還介紹了如何提高GUI應(yīng)用程序的響應(yīng)性;第三部分介紹了并發(fā)編程的性能調(diào)優(yōu),包括如何避免活躍性問(wèn)題,如何提高并發(fā)代碼的性能和可伸縮性以獲得理想的性能,以及在測(cè)試并發(fā)代碼正確性和性能時(shí)的一些實(shí)用技術(shù);第四部分介紹了Java并發(fā)編程中的一些高級(jí)主題,包括顯式鎖、原子變量、非阻塞算法以及如何開發(fā)自定義的同步工具類等。本書的特點(diǎn)在于注重闡述并發(fā)技術(shù)背后的理論知識(shí),對(duì)于每種技術(shù)的介紹不僅使讀者能做到“知其然”,更能做到“知其所以然”。對(duì)于希望深入研究和探索Java并發(fā)編程的讀者來(lái)說(shuō),本書是非常合適的。參與本書翻譯工作的還有李楊、吳漢平、徐光景、童勝漢、陳軍、胡凱、劉紅、張瑋、陳紅、李斌、李勇濤、王海濤、周云波、彭敏才、張世鋒、朱介秋、宗敬、李靜、葉錦、高波、熊莉、程鳳、陳娟、胡世娟、董敏、謝路陽(yáng)、馮卓、李志勇、胡歡、王進(jìn)等。由于譯者的時(shí)間和水平有限,翻譯中的疏漏和錯(cuò)誤在所難免,還望讀者和同行不吝指正。


前言/序言

本書共分為四個(gè)部分:

基礎(chǔ)知識(shí)。第一部分(第2章~第5章)重點(diǎn)介紹了并發(fā)性和線程安全性的基本概念,以及如何使用類庫(kù)提供的基本并發(fā)構(gòu)建塊來(lái)構(gòu)建線程安全類。在第一部分給出了一個(gè)清單,其中總結(jié)了這一部分中介紹的最重要的規(guī)則。

第2章與第3章構(gòu)成了本書的基礎(chǔ)。在這兩章中給出了幾乎所有用于避免并發(fā)危險(xiǎn)、構(gòu)造線程安全的類以及驗(yàn)證線程安全的規(guī)則。如果讀者重“實(shí)踐”而輕“理論”,那么可能會(huì)直接跳到第二部分,但在開始編寫任何并發(fā)代碼之前,一定要回來(lái)讀一讀這兩章!

第4章介紹了如何將一些小的線程安全類組合成更大的線程安全類。第5章介紹了在平臺(tái)庫(kù)中提供的一些基礎(chǔ)的并發(fā)構(gòu)建模塊,包括線程安全的容器類和同步工具類。

結(jié)構(gòu)化并發(fā)應(yīng)用程序。第二部分(第6章~第9章)介紹了如何利用線程來(lái)提高并發(fā)應(yīng)用程序的吞吐量或響應(yīng)性。第6章介紹了如何識(shí)別可并行執(zhí)行的任務(wù),以及如何在任務(wù)執(zhí)行框架中執(zhí)行它們。第7章介紹了如何使任務(wù)和線程在執(zhí)行完正常工作之前提前結(jié)束。在健壯的并發(fā)應(yīng)用程序與看似能正常工作的應(yīng)用程序之間存在的重要差異之一就是,如何實(shí)現(xiàn)取消以及關(guān)閉等操作。第8章介紹了任務(wù)執(zhí)行框架中的一些更高級(jí)特性。第9章介紹了如何提高單線程子系統(tǒng)的響應(yīng)性。

活躍性、性能與測(cè)試。第三部分(第10章~第12章)介紹了如何確保并發(fā)程序執(zhí)行預(yù)期的任務(wù),以及如何獲得理想的性能。第10章介紹了如何避免一些使程序無(wú)法執(zhí)行下去的活躍性故障。第11章介紹了如何提高并發(fā)代碼的性能和可伸縮性。第12章介紹了在測(cè)試并發(fā)代碼的正確性和性能時(shí)可以采用的一些技術(shù)。

高級(jí)主題。第四部分(第13章~第16章)介紹了資深開發(fā)人員可能感興趣的一些主題,包括:顯式鎖、原子變量、非阻塞算法以及如何開發(fā)自定義的同步工具類。


點(diǎn)此購(gòu)買


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)