書[0名0]: | Java並發編程實戰([0第0]16屆Jolt[0大0]奬提[0名0]圖書,Java並發編程必讀佳作)|199038 |
圖書定價: | 69元 |
圖書作者: | (美)Brian Goetz;Tim Peierls 等 |
齣版社: | [1機1] 械工業齣版社 |
齣版日期: | 2012/2/1 0:00:00 |
ISBN號: | 9787111370048 |
開本: | 16開 |
頁數: | 291 |
版次: | 1-1 |
作者簡介 |
作者:蓋茨(Brian Goetz) (美[0國0])Tim Peierls (美[0國0])Joshua Bloch 等 譯者:童雲蘭 等 本書作者都是Java Community Process JSR 166專傢組(並發工具)的主要成員,並在其他很多JCP專傢組裏任職。Brian Goetz有20多年的軟件谘詢行業經驗,並著有至少75篇關於Java開發的文章。 Tim Peierls是“現代多處理器”的典範,他在BoxPop.biz、唱片藝術和戲劇錶演方麵也頗有研究。 Joseph Bowbeer是一個Java ME專傢,他對並發編程的興趣始於Apollo計算 [1機1] 時代。David Holmes是《The Java Programming Language》一書的閤著者,任職於Sun公司。 Joshua Bloch是Google公司的[0首0]席Java架構師,《Effective Java》一書的作者,並參與著作瞭《Java Puzzlers》。 Doug Lea是《Concurrent Programming》一書的作者,紐約州立[0大0][0學0] Oswego分校的計算 [1機1] 科[0學0]教授。 |
內容簡介 |
《Java並發編程實戰》深入淺齣地介紹瞭Java綫程和並發,是一本完美的Java並發參考手冊。書中從並發性和綫程安全性的基本概念齣發,介紹瞭如何使用類庫提供的基本並發構建塊,用於避免並發危險、構造綫程安全的類及驗證綫程安全的規則,如何將小的綫程安全類組閤成更[0大0]的綫程安全類,如何利用綫程來提高並發應用程序的吞吐量,如何識彆可並行執行的任務,如何提高單綫程子係統的響應性,如何確保並發程序執行預期任務,如何提高並發代碼的性能和可伸縮性等內容,後介紹瞭一些高級主題,如顯式鎖、原子變量、非阻塞算[0法0]以及如何開發自定義的同步工具類。 《Java並發編程實戰》適閤Java程序開發人員閱讀。 |
目錄 |
《Java並發編程實戰》 對本書的贊譽 譯者序 前 言 [0第0]1章 簡介1 1.1 並發簡[0史0]1 1.2 綫程的[0優0]勢2 1.2.1 發揮多處理器的強[0大0]能力2 1.2.2 建模的簡單性3 1.2.3 異步事件的簡化處理3 1.2.4 響應更靈敏的用戶界麵4 1.3 綫程帶來的風險4 1.3.1 安全性問題5 1.3.2 活躍性問題7 1.3.3 性能問題7 1.4 綫程無處不在7 [0第0]一部分 基礎[0知0]識 [0第0]2章 綫程安全性11 2.1 什麼是綫程安全性13 2.2 原子性14 2.2.1 競態條件15 2.2.2 示例:延遲初始化中的競態條件16 2.2.3 復閤操作17 2.3 加鎖 [1機1] 製18 2.3.1 內置鎖20 2.3.2 重入21 2.4 用鎖來保護狀態22 2.5 活躍性與性能23 [0第0]3章 對象的共享27 3.1 可見性27 3.1.1 失效數據28 3.1.2 非原子的64位操作29 3.1.3 加鎖與可見性30 3.1.4 Volatile變量 30 3.2 發布與逸齣32 3.3 綫程封閉35 3.3.1 Ad-hoc綫程封閉35 3.3.2 棧封閉36 3.3.3 ThreadLocal類37 3.4 不變性38 3.4.1 Final域39 3.4.2 示例:使用Volatile類型來發布不可變對象40 3.5 安全發布41 3.5.1 不正確的發布:正確的對象被破壞42 3.5.2 不可變對象與初始化安全性42 3.5.3 安全發布的常用模式43 3.5.4 事實不可變對象44 3.5.5 可變對象44 3.5.6 安全地共享對象44 [0第0]4章 對象的組閤46 4.1 設計綫程安全的類46 4.1.1 收集同步需求47 4.1.2 依賴狀態的操作48 4.1.3 狀態的所有[0[0權0]0]48 4.2 實例封閉49 4.2.1 Java監視器模式51 4.2.2 示例:車輛追蹤51 4.3 綫程安全性的委托53 4.3.1 示例:基於委托的車輛追蹤器54 4.3.2 [0獨0]立的狀態變量55 4.3.3 [0當0]委托失效時56 4.3.4 發布底層的狀態變量57 4.3.5 示例:發布狀態的車輛追蹤器58 4.4 在現有的綫程安全類中添加功能59 4.4.1 客戶端加鎖 [1機1] 製60 4.4.2 組閤62 4.5 將同步策略文檔化62 [0第0]5章 基礎構建模塊66 5.1 同步容器類66 5.1.1 同步容器類的問題66 5.1.2 迭代器與Concurrent-ModificationException68 5.1.3 隱藏迭代器69 5.2 並發容器70 5.2.1 ConcurrentHashMap71 5.2.2 額外的原子Map操作72 5.2.3 CopyOnWriteArrayList72 5.3 阻塞隊列和生産者-消費者模式73 5.3.1 示例:桌麵搜索75 5.3.2 串行綫程封閉76 5.3.3 [0[0雙0]0]端隊列與工作密取77 5.4 阻塞方[0法0]與中斷方[0法0]77 5.5 同步工具類78 5.5.1 閉鎖79 5.5.2 FutureTask80 5.5.3 信號量82 5.5.4 柵欄83 5.6 構建高效且可伸縮的結果緩存85 [0第0]二部分 結構化並發應用程序 [0第0]6章 任務執行93 6.1 在綫程中執行任務93 6.1.1 串行地執行任務94 6.1.2 顯式地為任務創建綫程94 6.1.3 無限製創建綫程的不足95 6.2 Executor框架96 6.2.1 示例:基於Executor的Web服務器97 6.2.2 執行策略98 6.2.3 綫程池98 6.2.4 Executor的生命周期99 6.2.5 延遲任務與周期任務101 6.3 找齣可利用的並行性102 6.3.1 示例:串行的頁麵渲染器102 6.3.2 攜帶結果的任務C[0all0]able與Future103 6.3.3 示例:使用Future實現頁麵渲染器104 6.3.4 在異構任務並行化中存在的局限106 6.3.5 CompletionService:Executor與BlockingQueue106 6.3.6 示例:使用CompletionService實現頁麵渲染器107 6.3.7 為任務設置時限108 6.3.8 示例:旅行預定門戶網站109 [0第0]7章 取消與關閉111 7.1 任務取消111 7.1.1 中斷113 7.1.2 中斷策略116 7.1.3 響應中斷117 7.1.4 示例:計時運行118 7.1.5 通過Future來實現取消120 7.1.6 處理不可中斷的阻塞121 7.1.7 采用newTaskFor來封裝非標準的取消122 7.2 停止基於綫程的服務124 7.2.1 示例:日誌服務124 7.2.2 關閉ExecutorService127 7.2.3 “毒丸”對象128 7.2.4 示例:隻執行一次的服務129 7.2.5 shutdown[0No0]w的局限性130 7.3 處理非正常的綫程終止132 7.4 JVM關閉135 7.4.1 關閉鈎子135 7.4.2 守護綫程136 7.4.3 終結器136 [0第0]8章 綫程池的使用138 8.1 在任務與執行策略之間的隱性耦閤138 8.1.1 綫程飢餓死鎖139 8.1.2 運行時間較長的任務140 8.2 設置綫程池的[0大0]小140 8.3 配置ThreadPoolExecutor141 8.3.1 綫程的創建與銷毀142 8.3.2 管理隊列任務142 8.3.3 飽和策略144 8.3.4 綫程工廠146 8.3.5 在調用構造函數後再定製ThreadPoolExecutor147 8.4 擴展 ThreadPoolExecutor148 8.5 遞歸算[0法0]的並行化149 [0第0]9章 圖形用戶界麵應用程序156 9.1 為什麼GUI是單綫程的156 9.1.1 串行事件處理157 9.1.2 Swing中的綫程封閉 [1機1] 製158 9.2 短時間的GUI任務160 9.3 長時間的GUI任務161 9.3.1 取消162 9.3.2 進度標識和完成標識163 9.3.3 SwingWorker165 9.4 共享數據模型165 9.4.1 綫程安全的數據模型166 9.4.2 分解數據模型166 9.5 其他形式的單綫程子係統167 [0第0]三部分 活躍性、性能與測試 [0第0]10章 避免活躍性危險169 10.1 死鎖169 10.1.1 鎖順序死鎖170 10.1.2 動態的鎖順序死鎖171 10.1.3 在協作對象之間發生的死鎖174 10.1.4 開放調用175 10.1.5 資源死鎖177 10.2 死鎖的避免與診斷178 10.2.1 支持定時的鎖178 10.2.2 通過綫程轉儲信息來分析死鎖178 10.3 其他活躍性危險180 10.3.1 飢餓180 10.3.2 糟糕的響應性181 10.3.3 活鎖181 [0第0]11章 性能與可伸縮性183 11.1 對性能的思考183 11.1.1 性能與可伸縮性184 11.1.2 [0評0]估各種性能[0[0權0]0]衡因素185 11.2 Amdahl定律186 11.2.1 示例:在各種框架中隱藏的串行部分188 11.2.2 Amdahl定律的應用189 11.3 綫程引入的開銷189 11.3.1 上下文切換190 11.3.2 內存同步190 11.3.3 阻塞192 11.4 減少鎖的競爭192 11.4.1 縮小鎖的範圍(“快進快齣”)193 11.4.2 減小鎖的粒度195 11.4.3 鎖分段196 11.4.4 避免熱點域197 11.4.5 一些替代[0獨0]占鎖的方[0法0]198 11.4.6 監測CPU的利用率199 11.4.7 嚮對象池說“不”200 11.5 示例:比較Map的性能200 11.6 減少上下文切換的開銷201 [0第0]12章 並發程序的測試204 12.1 正確性測試205 12.1.1 基本的單元測試206 12.1.2 對阻塞操作的測試207 12.1.3 安全性測試208 12.1.4 資源管理的測試212 12.1.5 使用迴調213 12.1.6 産生更多的交替操作214 12.2 性能測試215 12.2.1 在PutTakeTest中增加計時功能215 12.2.2 多種算[0法0]的比較217 12.2.3 響應性衡量218 12.3 避免性能測試的陷阱220 12.3.1 垃圾迴收220 12.3.2 動態編譯220 12.3.3 對代碼路徑的不真實采樣222 12.3.4 不真實的競爭程度222 12.3.5 無用代碼的消除223 12.4 其他的測試方[0法0]224 12.4.1 代碼審查224 12.4.2 靜態分析工具224 12.4.3 麵嚮方麵的測試技術226 12.4.4 分析與監測工具226 [0第0]四部分 高級主題 [0第0]13章 顯式鎖227 13.1 Lock與 ReentrantLock227 13.1.1 輪詢鎖與定時鎖228 13.1.2 可中斷的鎖獲取操作230 13.1.3 非塊結構的加鎖231 13.2 性能考慮因素231 13.3 公平性232 13.4 在synchronized和ReentrantLock之間進行選擇234 13.5 讀-寫鎖235 [0第0]14章 構建自定義的同步工具238 14.1 狀態依賴性的管理238 14.1.1 示例:將前提條件的失敗傳遞給調用者240 14.1.2 示例:通過輪詢與休眠來實現簡單的阻塞241 14.1.3 條件隊列243 14.2 使用條件隊列244 14.2.1 條件謂詞244 14.2.2 過早喚醒245 14.2.3 丟失的信號246 14.2.4 通[0知0]247 14.2.5 示例:閥門類248 14.2.6 子類的安全問題249 14.2.7 封裝條件隊列250 14.2.8 入口協議與齣口協議250 14.3 顯式的Condition對象251 14.4 Synchronizer剖析253 14.5 AbstractQueuedSynchronizer254 14.6 java.util.concurrent同步器類中的 AQS257 14.6.1 ReentrantLock257 14.6.2 Semaphore與CountDownLatch258 14.6.3 FutureTask259 14.6.4 ReentrantReadWriteLock259 [0第0]15章 原子變量與非阻塞同步 [1機1] 製261 15.1 鎖的劣勢261 15.2 硬件對並發的支持262 15.2.1 比較並交換263 15.2.2 非阻塞的計數器264 15.2.3 JVM對CAS的支持265 15.3 原子變量類265 15.3.1 原子變量是一種“更好的volatile”266 15.3.2 性能比較:鎖與原子變量267 15.4 非阻塞算[0法0]270 15.4.1 非阻塞的棧270 15.4.2 非阻塞的鏈錶272 15.4.3 原子的域更[親斤]器274 15.4.4 ABA問題275 [0第0]16章 Java內存模型277 16.1 什麼是內存模型,為什麼需要它277 16.1.1 平颱的內存模型278 16.1.2 重排序278 16.1.3 Java內存模型簡介280 16.1.4 藉助同步281 16.2 發布283 16.2.1 不安全的發布283 16.2.2 安全的發布284 16.2.3 安全初始化模式284 16.2.4 [0[0雙0]0]重檢查加鎖286 16.3 初始化過程中的安全性287 附錄A 並發性標注289 參考文獻291 |
編輯推薦 |
《Java並發編程實戰》[0第0]16屆Jolt[0大0]奬提[0名0]圖書,JavaOne[0大0][0會0][0暢0]銷圖書,瞭解Java並發編程必讀佳作。綫程是Java平颱的基礎組成部分之一。隨著多核處理器逐漸成為主流,如何高效地使用並發已成為構建高性能應用程序的重要因素。Java SE 5和Java 6在並發程序開發方麵取得瞭巨[0大0]的進步,在其Java虛擬 [1機1] 中能支持一些高性能的並且具有高可伸縮性的並發類,此外還支持一組[親斤]的並發基礎構建模塊。在《Java並發編程實戰》中,這些[親斤]功能的編寫者們不僅介紹瞭它們的工作原理和使用方式,還介紹瞭隱藏在這些功能背後的研究背景與設計模式。 然而,在開發、測試以及調試多綫程的程序時仍然存在巨[0大0]的睏難。開發人員很容易編寫齣一些看似能正常工作,但在一些情況下仍然[0會0]失敗的程序(包括在正式發布的産[0品0]中,以及在高負載環境中)。《Java並發編程實戰》不僅講解瞭並發的理論基礎,還介紹瞭各種實際的開發技術,這些[0知0]識對於構建可靠的、可伸縮的以及可維護的並發應用程序來說非常有用。《Java並發編程實戰》並不僅是簡單地羅列齣各種並發API以及 [1機1] 製,而是詳細地介紹瞭許多設計原則、設計模式以及思維模式,這些內容使得開發人員更容易構建齣正確的並且高性能的並發程序。 《Java並發編程實戰》主要內容包括:並發性與綫程安全性的基本概念,構建以及組閤各種綫程安全類的技術,使用java.util.concurrent包中的各種井發構建基礎模塊,性能[0優0]化中的注意事項,如何測試並發程序,以及一些高級主題,包括原子變量,無阻塞算[0法0]及JAVA內存模。 |
評分
評分
評分
評分
評分
評分
評分
評分
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有