日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
Java并發編程實戰圖書
人氣:77

Java并發編程實戰

本書深入淺出地介紹了Java線程和并發,是一本的Java并發參考手冊。

內容簡介

本書深入淺出地介紹了Java線程和并發,是一本的Java并發參考手冊。書中從并發性和線程安全性的基本概念出發,介紹了如何使用類庫提供的基本并發構建塊,用于避免并發危險、構造線程安全的類及驗證線程安全的規則,如何將小的線程安全類組合成更大的線程安全類,如何利用線程來提高并發應用程序的吞吐量,如何識別可并行執行的任務,如何提高單線程子系統的響應性,如何確保并發程序執行預期任務,如何提高并發代碼的性能和可伸縮性等內容,介紹了一些高級主題,如顯式鎖、原子變量、非阻塞算法以及如何開發自定義的同步工具類。

本書適合Java程序開發人員閱讀。

編輯推薦

第16屆Jolt大獎提名圖書

JavaOne大會暢銷圖書

了解Java并發編程必讀佳作

作者簡介

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

目錄

對本書的贊譽

譯者序

前 言

第1章 簡介

1.1 并發簡史

1.2 線程的優勢

1.2.1 發揮多處理器的強大能力

1.2.2 建模的簡單性

1.2.3 異步事件的簡化處理

1.2.4 響應更靈敏的用戶界面

1.3 線程帶來的風險

1.3.1 安全性問題

1.3.2 活躍性問題

1.3.3 性能問題

1.4 線程無處不在

及時部分 基礎知識

第2章 線程安全性

2.1 什么是線程安全性

2.2 原子性

2.2.1 競態條件

2.2.2 示例:延遲初始化中的競態條件

2.2.3 復合操作

2.3 加鎖機制

2.3.1 內置鎖

2.3.2 重入

2.4 用鎖來保護狀態

2.5 活躍性與性能

第3章 對象的共享

3.1 可見性

3.1.1 失效數據

3.1.2 非原子的64位操作

3.1.3 加鎖與可見性

3.1.4 Volatile變量

3.2 與逸出

3.3 線程封閉

3.3.1 Ad-hoc線程封閉

3.3.2 棧封閉

3.3.3 ThreadLocal類

3.4 不變性

3.4.1 Final域

3.4.2 示例:使用Volatile類型來不可變對象

3.5 安全

3.5.1 不正確的:正確的對象被破壞

3.5.2 不可變對象與初始化安全性

3.5.3 安全的常用模式

3.5.4 事實不可變對象

3.5.5 可變對象

3.5.6 安全地共享對象

第4章 對象的組合

4.1 設計線程安全的類

4.1.1 收集同步需求

4.1.2 依賴狀態的操作

4.1.3 狀態的所有權

4.2 實例封閉

4.2.1 Java監視器模式

4.2.2 示例:車輛追蹤

4.3 線程安全性的委托

4.3.1 示例:基于委托的車輛追蹤器

4.3.2 獨立的狀態變量

4.3.3 當委托失效時

4.3.4 底層的狀態變量

4.3.5 示例:狀態的車輛追蹤器

4.4 在現有的線程安全類中添加功能

4.4.1 客戶端加鎖機制

4.4.2 組合

4.5 將同步策略文檔化

第5章 基礎構建模塊

5.1 同步容器類

5.1.1 同步容器類的問題

5.1.2 迭代器與Concurrent-ModificationException

5.1.3 隱藏迭代器

5.2 并發容器

5.2.1 ConcurrentHashMap

5.2.2 額外的原子Map操作

5.2.3 CopyOnWriteArrayList

5.3 阻塞隊列和生產者-消費者模式

5.3.1 示例:桌面搜索

5.3.2 串行線程封閉

5.3.3 雙端隊列與工作密取

5.4 阻塞方法與中斷方法

5.5 同步工具類

5.5.1 閉鎖

5.5.2 FutureTask

5.5.3 信號量

5.5.4 柵欄

5.6 構建高效且可伸縮的結果緩存

第二部分 結構化并發應用程序

第6章 任務執行

6.1 在線程中執行任務

6.1.1 串行地執行任務

6.1.2 顯式地為任務創建線程

6.1.3 無限制創建線程的不足

6.2 Executor框架

6.2.1 示例:基于Executor的Web服務器

6.2.2 執行策略

6.2.3 線程池

6.2.4 Executor的生命周期

6.2.5 延遲任務與周期任務

6.3 找出可利用的并行性

6.3.1 示例:串行的頁面渲染器

6.3.2 攜帶結果的任務Callable與Future

6.3.3 示例:使用Future實現頁面渲染器

6.3.4 在異構任務并行化中存在的局限

6.3.5 CompletionService:Executor與BlockingQueue

6.3.6 示例:使用CompletionService實現頁面渲染器

6.3.7 為任務設置時限

6.3.8 示例:旅行預定門戶網站

第7章 取消與關閉

7.1 任務取消

7.1.1 中斷

7.1.2 中斷策略

7.1.3 響應中斷

7.1.4 示例:計時運行

7.1.5 通過Future來實現取消

7.1.6 處理不可中斷的阻塞

7.1.7 采用newTaskFor來封裝非標準的取消

7.2 停止基于線程的服務

7.2.1 示例:日志服務

7.2.2 關閉ExecutorService

7.2.3 "毒丸"對象

7.2.4 示例:只執行一次的服務

7.2.5 shutdownNow的局限性

7.3 處理非正常的線程終止

7.4 JVM關閉

7.4.1 關閉鉤子

7.4.2 守護線程

7.4.3 終結器

第8章 線程池的使用

8.1 在任務與執行策略之間的隱性耦合

8.1.1 線程饑餓死鎖

8.1.2 運行時間較長的任務

8.2 設置線程池的大小

8.3 配置ThreadPoolExecutor

8.3.1 線程的創建與銷毀

8.3.2 管理隊列任務

8.3.3 飽和策略

8.3.4 線程工廠

8.3.5 在調用構造函數后再定制ThreadPoolExecutor

8.4 擴展 ThreadPoolExecutor

8.5 遞歸算法的并行化

第9章 圖形用戶界面應用程序

9.1 為什么GUI是單線程的

9.1.1 串行事件處理

9.1.2 Swing中的線程封閉機制

9.2 短時間的GUI任務

9.3 長時間的GUI任務

9.3.1 取消

9.3.2 進度標識和完成標識

9.3.3 SwingWorker

9.4 共享數據模型

9.4.1 線程安全的數據模型

9.4.2 分解數據模型

9.5 其他形式的單線程子系統

第三部分 活躍性、性能與測試

第10章 避免活躍性危險

10.1 死鎖

10.1.1 鎖順序死鎖

10.1.2 動態的鎖順序死鎖

10.1.3 在協作對象之間發生的死鎖

10.1.4 開放調用

10.1.5 資源死鎖

10.2 死鎖的避免與診斷

10.2.1 支持定時的鎖

10.2.2 通過線程轉儲信息來分析死鎖

10.3 其他活躍性危險

10.3.1 饑餓

10.3.2 糟糕的響應性

10.3.3 活鎖

第11章 性能與可伸縮性

11.1 對性能的思考

11.1.1 性能與可伸縮性

11.1.2 評估各種性能權衡因素

11.2 Amdahl定律

11.2.1 示例:在各種框架中隱藏的串行部分

11.2.2 Amdahl定律的應用

11.3 線程引入的開銷

11.3.1 上下文切換

11.3.2 內存同步

11.3.3 阻塞

11.4 減少鎖的競爭

11.4.1 縮小鎖的范圍("快進快出")

11.4.2 減小鎖的粒度

11.4.3 鎖分段

11.4.4 避免熱點域

11.4.5 一些替代獨占鎖的方法

11.4.6 監測CPU的利用率

11.4.7 向對象池說"不"

11.5 示例:比較Map的性能

11.6 減少上下文切換的開銷

第12章 并發程序的測試

12.1 正確性測試

12.1.1 基本的單元測試

12.1.2 對阻塞操作的測試

12.1.3 安全性測試

12.1.4 資源管理的測試

12.1.5 使用回調

12.1.6 產生更多的交替操作

12.2 性能測試

12.2.1 在PutTakeTest中增加計時功能

12.2.2 多種算法的比較

12.2.3 響應性衡量

12.3 避免性能測試的陷阱

12.3.1 垃圾回收

12.3.2 動態編譯

12.3.3 對代碼路徑的不真實采樣

12.3.4 不真實的競爭程度

12.3.5 無用代碼的消除

12.4 其他的測試方法

12.4.1 代碼審查

12.4.2 靜態分析工具

12.4.3 面向方面的測試技術

12.4.4 分析與監測工具

第四部分 高級主題

第13章 顯式鎖

13.1 Lock與 ReentrantLock

13.1.1 輪詢鎖與定時鎖

13.1.2 可中斷的鎖獲取操作

13.1.3 非塊結構的加鎖

13.2 性能考慮因素

13.3 公平性

13.4 在synchronized和ReentrantLock之間進行選擇

13.5 讀-寫鎖

第14章 構建自定義的同步工具

14.1 狀態依賴性的管理

14.1.1 示例:將前提條件的失敗傳遞給調用者

14.1.2 示例:通過輪詢與休眠來實現簡單的阻塞

14.1.3 條件隊列

14.2 使用條件隊列

14.2.1 條件謂詞

14.2.2 過早喚醒

14.2.3 丟失的信號

14.2.4 通知

14.2.5 示例:閥門類

14.2.6 子類的安全問題

14.2.7 封裝條件隊列

14.2.8 入口協議與出口協議

14.3 顯式的Condition對象

14.4 Synchronizer剖析

14.5 AbstractQueuedSynchronizer

14.6 java.util.concurrent同步器類中的 AQS

14.6.1 ReentrantLock

14.6.2 Semaphore與CountDownLatch

14.6.3 FutureTask

14.6.4 ReentrantReadWriteLock

第15章 原子變量與非阻塞同步機制

15.1 鎖的劣勢

15.2 硬件對并發的支持

15.2.1 比較并交換

15.2.2 非阻塞的計數器

15.2.3 JVM對CAS的支持

15.3 原子變量類

15.3.1 原子變量是一種"更好的volatile"

15.3.2 性能比較:鎖與原子變量

15.4 非阻塞算法

15.4.1 非阻塞的棧

15.4.2 非阻塞的鏈表

15.4.3 原子的域更新器

15.4.4 ABA問題

第16章 Java內存模型

16.1 什么是內存模型,為什么需要它

16.1.1 平臺的內存模型

16.1.2 重排序

16.1.3 Java內存模型簡介

16.1.4 借助同步

16.2

16.2.1 不安全的

16.2.2 安全的

16.2.3 安全初始化模式

16.2.4 雙重檢查加鎖

16.3 初始化過程中的安全性

附錄A 并發性標注

參考文獻

在線預覽

及時章 簡 介

編寫正確的程序很難,而編寫正確的并發程序則難上加難。與串行程序相比,在并發程序中存在更多容易出錯的地方。那么,為什么還要編寫并發程序?線程是Java語言中不可或缺的重要功能,它們能使復雜的異步代碼變得更簡單,從而極大地簡化了復雜系統的開發。此外,要想充分發揮多處理器系統的強大計算能力,最簡單的方式就是使用線程。隨著處理器數量的持續增長,如何高效地使用并發正變得越來越重要。

1.1 并發簡史

在早期的計算機中不包含操作系統,它們從頭到尾只執行一個程序,并且這個程序能訪問計算機中的所有資源。在這種裸機環境中,不僅很難編寫和運行程序,而且每次只能運行一個程序,這對于昂貴并且稀有的計算機資源來說也是一種浪費。

操作系統的出現使得計算機每次能運行多個程序,并且不同的程序都在單獨的進程中運行:操作系統為各個獨立執行的進程分配各種資源,包括內存,文件句柄以及安全證書等。如果需要的話,在不同的進程之間可以通過一些粗粒度的通信機制來交換數據,包括:套接字、信號處理器、共享內存、信號量以及文件等。

之所以在計算機中加入操作系統來實現多個程序的同時執行,主要是基于以下原因:

資源利用率。在某些情況下,程序必須等待某個外部操作執行完成,例如輸入操作或輸出操作等,而在等待時程序無法執行其他任何工作。因此,如果在等待的同時可以運行另一個程序,那么無疑將提高資源的利用率。

公平性。不同的用戶和翠序對于計算機上的資源有著同等的使用權。一種高效的運行方式是通過粗粒度的時間分片(Time Slicing)使這些用戶和程序能共享計算機資源,而不是由一個程序從頭運行到尾,然后再啟動下一個程序。

便利性。通常來說,在計算多個任務時,應該編寫多個程序,每個程序執行一個任務并在必要時相互通信,這比只編寫一個程序來計算所有任務更容易實現。

……

媒體評論

"我曾有幸在一個偉大的團隊中工作,參與設計和實現在Java 5.0和Java 6等平臺中新增的并發功能。現在,仍然是這個團隊,將透徹地講解這些新功能,以及關于并發的一般性概念。并發已不再只是高級用戶談論的話題,每一位Java開發人員都應該閱讀這本書。" —Martin Buchholz,Sun公司的JDK并發大師

"在過去30多年時間里,計算機性能一直遵循著摩爾定律,但從現在開始,它將遵循Amdahl定律。編寫能高效利用多處理器的代碼非常具有挑戰性。在這本書中介紹的一些概念和技術,對于在當前(以及未來的)系統上編寫安全的和可伸縮的代碼來說都是非常有用的。"—Doron Rajwan,Intel公司研究人員

"如果你正在編寫、設計、調試、維護以及分析多線程的Java程序,那么本書正是你所需要的。如果你曾對某個方法進行過同步,但卻不理解其中的原因,那么你以及你的用戶都有必要從頭至尾仔細地讀一讀這本書。" —Ted Neward,《Effective Enterprise Java》的作者

"Brian非常清晰地闡述了并發的一些基本問題與復雜性。對于使用線程并關注程序執行性能的開發人員來說,這是一本必讀的書。" —Kirk Pepperdine,JavaPerformanceTuning.com網站CTO

"本書深入淺出地介紹了一些復雜的編程主題,是一本的Java并發參考手冊。書中的每一頁都包含了程序員日常需要應對的問題(以及相應的解決方案)。隨著摩爾定律的發展趨勢由提高處理器核的速度轉向增加處理器核的數量,如何有效地利用并發性已變得越來越重要,本書正好介紹了這些方面的內容。" —Cliff Click博士,Azul Systems公司高級軟件工程師

"我對并發有著濃厚的興趣,并且與大多數程序員相比,我或許寫過更多存在線程死鎖的代碼,也在同步上犯了更多的錯誤。在介紹Java線程和并發等主題的眾多書籍中,Brian的這本書可讀性,它通過循序漸進的方式將一些復雜的主題闡述得很清楚。我將本書推薦給Java Specialists?Newsletter的所有讀者,因為它不僅有趣,而且很有用,它介紹了當前Java開發人員正在面對的許多問題。" —Heinz Kabutz博士,Java Specialists?Newsletter的維護者

"我一直努力想使一些簡單的問題變得更簡單,然而本書已經簡化了一個復雜但卻關鍵的主題:并發。這本書采用了創新的講解方法、簡單明了的風格,它注定會成為一本非常重要的書。 —Bruce Tate,《Beyond Java》的作者

這本書為Java開發人員在線程編程領域提供了不可多得的知識。我在讀這本書時受到了極大的啟發,部分原因在于它詳細地介紹了Java中并發領域的API,但更重要的卻在于這本書以一種透徹并且易懂的方式來介紹復雜的并發知識,這是其他書籍很難媲美的。 —Bill Venners,《Inside the Java Virtual Machine》的作者

網友評論(不代表本站觀點)

來自無昵稱**的評論:

java并發必讀書籍,雖然java版本比較早,還是買本收藏了

2017-11-17 21:23:28
來自楓火199**的評論:

沖著豆瓣評分超高買的,但是買回來看了前幾章,不是很理解,感覺這本書不太適合新手來看

2017-11-10 10:55:42
來自r***g(**的評論:

印刷還可以,紙質質量不是太精美,但不影響閱讀

2017-04-25 09:39:35
來自匿名用**的評論:

書比我想象的薄,很開心因為薄代表我可以比之前想象的更快的看完

2017-06-09 18:26:24
來自***(匿**的評論:

書的質量很不錯,至于內容就不多說了,畢竟是經典,就是取快遞比以前麻煩了不少

2017-04-21 15:39:48
來自匿名用**的評論:

重要的是書本身的內容,到手的時候外包裝薄膜已經破了,但是其實是沒什么影響的

2017-06-15 20:51:05
來自***(匿**的評論:

Java并發程序設計最好的書不得不看,值得購買

2017-04-27 06:05:24
來自無昵稱**的評論:

忘記評價了, 想學習并發多線程的必看書目。你值得一看。

2015-07-14 14:06:33
來自ustcrdi**的評論:

本書關于并發編程的細節介紹得非常詳細,看得出有很多實踐功底,而不是一個理論派,建議每一個學并發的同學看看

2013-05-19 13:58:29
來自不說大**的評論:

這本書是真的可以,這本書以前是大家一推再推,后來買回來,講解有層次感。

2017-09-04 11:47:55
來自維尼cai**的評論:

concurrent包以及Java線程最好的解釋

2012-04-29 20:37:07
來自無昵稱**的評論:

現在的程序離不開多線程并發,出現并發bug極其難調試,如果遵循該書中提到的規則,可以減少很多出錯的可能。

2013-08-21 20:12:20
來自虎松**的評論:

對這本書早就久仰大名了,項目中用到了多線程操作。以前關于java高性能的資料很少,自己就在網上零星的找點資料。現在好了有了這本書,可以充分的了解線程的知識了。總之,這是一本java工程師不可多得的好書。

2012-05-07 17:43:37
來自andygao**的評論:

好書,對多線程、多并發有很深入的解釋,這本書還得常翻翻啊

2015-07-09 17:28:08
來自千里草**的評論:

這是一本非常好的java多線程書籍,對并發和線程池的應用寫的很實用,也很清晰。

2012-06-20 09:30:00
來自無昵稱**的評論:

對于JAVA開發,并發是非常重要的部分,這本書能讓你熟悉并發碰到的一些問題

2012-06-14 14:40:00
來自梧桐慕**的評論:

了解Java并發編程的必讀佳作,打算認真學習一下。

2015-02-06 19:47:08
來自無昵稱**的評論:

指導開發并發的書,我正在學習并發編程,很有幫助

2013-02-27 10:46:55
來自rayn000**的評論:

書中對并發敘述比較詳盡,對于初學者來說,門檻可能高一些,對有基礎的學者來說,是編程能力提升的一大步。

2017-10-16 16:12:46
來自匿名用**的評論:

買了600塊錢的書都在這了,每一本都挺不錯的,正版,實惠,一起300塊,有的單本平時都要六七十最便宜,反正自己覺得值!堅持看書,擴展知識。

2017-04-30 11:09:33
來自無昵稱**的評論:

并發一直不太明白,希望通過這本書能搞清楚一些重要的概念與思想

2016-11-21 19:13:06
來自光2009**的評論:

迄今為止,唯一一本比較全面而又由淺入深的java并發方面的書,比concurrent java那本經典的老書要更容易上手,適合想了解java并發編程的初學者

2013-09-16 16:17:40
來自匿名用**的評論:

很早就想買的書,聽說并發的知識,這本書講的很不錯,英文太爛,只能看中文版

2017-05-03 17:13:45
來自無昵稱**的評論:

Java并發編程實戰(第16屆Jolt大獎提名圖書,Java...

2016-04-13 21:18:40
來自無昵稱**的評論:

有深度的一本書,對理解多線程并發有一定的幫助,不過不適合新手看。里面介紹了一些同步工具類,BlockQueue,Fu***eTask,CountDownLatch,很有幫助。不過理論的東西太多,太深奧,實際demo太少。

2012-09-04 11:44:23
來自無昵稱**的評論:

不錯,書很好,不過不推薦沒有多線程基礎的人看,建議去并發網找一些博文看一下學一點基礎,然后再學這本書,那會高效很多。

2017-10-04 00:31:30
來自不想下**的評論:

JAVA關于并發的情況隨著海量數據的普遍而越來越常見,本書對JAVA并發編程實踐的講述對我很有借鑒和幫助

2016-04-22 21:10:46
來自無昵稱**的評論:

由淺入深,前幾章講一些基礎的概念;從第5章開始,越來越精彩。本書是JAVA多線程方面非常棒的一本實戰的書。對JAVA對線程的調用做了很詳細的介紹。推薦有一定開發經驗的JAVA開發人員閱讀。

2014-09-01 14:13:00
來自無昵稱**的評論:

不說翻譯吧,我是Java云計算方向的程序員,現在上大三呢,j2ee什么的都掌握的差不多了,想提高自己的編程水平,一口氣買了5本,當當購物很棒,以后還回來買的。??等讀了再來評論。

2015-04-14 11:03:00

免責聲明

更多出版社