-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Java多線程編程實戰指南(核心篇)

( 簡體 字)
作者:黃文海類別:1. -> 程式設計 -> JAVA -> Java
譯者:
出版社:電子工業出版社Java多線程編程實戰指南(核心篇) 3dWoo書號: 46628
詢問書籍請說出此書號!

缺書
NT售價: 445

出版日:4/1/2017
頁數:480
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121310652
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

隨著現代處理器的生產工藝從提升處理器主頻頻率轉向多核化,即在一塊芯片上集成多個處理器內核(Core),多核處理器(Multicore Processor)離我們越來越近了——如今就連智能手機這樣的消費類設備都已配備了4核乃至8核的處理器,更何況商用系統!在此背景下,以往靠單個處理器自身處理能力的提升所帶來的軟件計算性能提升的那種“免費午餐”已不復存在,這使得多線程編程在充分利用計算資源、提高軟件服務質量方面扮演了越來越重要的角色。故而,掌握多線程編程技能對廣大開發人員的重要性亦由此可見一斑。
本書內容及特色
本書以基本概念、原理與方法為主線,輔以豐富的實戰案例和生活化實例,并從Java虛擬機、操作系統和硬件多個層次與角度出發,循序漸進、系統地介紹Java平臺下的多線程編程核心技術及相關工具。
脈絡清晰、循序漸進和系統性介紹。全書圍繞多線程編程所要解決的問題(所要實現的目標)及其面臨的各種挑戰,由此展開介紹多線程編程中的相關概念、原理與技術。本書以先介紹相關問題及背景再給出相應的解決方案的方式來講解新的概念、知識。并且,本書對概念、原理與技術的講解會適當地深入到Java虛擬機、操作系統和硬件這三個層次與角度,而不僅僅停留在Java語言層面。全書章節是按照知識間的內在聯系并依照認知程度上的由淺至深的順序組織的。
以基本概念、原理與方法為主線。本書既注重實戰又注重理論對實踐的指導作用。本書以多線程編程的基本概念、原理與方法為主線,將Java平臺中與多線程編程相關的關鍵字、Java標準庫類(API)等知識串在其上進行講解,并在講解過程中適當穿插相關工具的介紹。本書在介紹相關Java標準庫類時,不僅僅介紹其API,還適當介紹其內部實現原理與實戰注意事項。
輔以豐富的實戰案例和生活化實例。本書配有豐富的實戰案例,這些案例的配套源碼都是可以實際運行的,以便讀者進行實驗。本書在介紹一些概念和原理的時候往往輔以一些生活化實例以增加讀者的感性認識,降低理解難度。
答疑解惑。本書講解過程中會穿插一些“擴展閱讀”的內容,這部分內容以問答的形式來對多線程編程的初學者在學習和工作過程中經常遇到的一些疑惑和問題進行解答。
本書一共分為12章,各章的主要內容如下。
第1章主要介紹線程及多線程編程這兩個基本概念,以及Java平臺的線程API,并通過一個實戰案例使讀者對多線程編程有個初步和感性的認識。
第2章主要介紹多線程編程所要實現的目標及其面臨的挑戰。明確多線程編程的目標有助于我們在實踐中做到有的放矢,掌握多線程編程所面臨的挑戰使得我們在學習本書后續內容時能夠做到知其然而且知其所以然。
第3章主要介紹Java平臺所提供的能夠用于應對多線程編程所面臨的部分挑戰的一些關鍵字和標準庫類(API),以及這些關鍵字和API的性能開銷、適用場景及注意事項。
第4章通過實戰案例介紹具體如何玩轉線程以實現多線程編程的目標,并通過這些實戰案例展開介紹多線程編程實踐中的一些實際問題及應對措施。
第5章主要介紹線程與線程之間通過哪些常見的協作形式來實現多線程編程的目標以及Java所支持的相應標準庫類。
第6章主要從軟件設計的角度出發介紹應對多線程編程所面臨的一些挑戰的常見技術。
第7章主要介紹多線程程序可能產生的一些常見的具有隱蔽性的故障以及相應的規避措施。
第8章主要介紹在多線程編程中如何更加有效和有效率地使用線程。
第9章主要從計算模型的角度出發介紹多線程編程中如何利用線程來提高軟件的吞吐率和響應性。
第10章主要介紹Java平臺中多線程程序的調試技巧與測試手段。
第11章主要介紹多線程編程的硬件基礎以及Java平臺為屏蔽不同硬件平臺的差異而進行的抽象(Java內存模型)。
第12章結合實戰案例介紹與Java平臺中的多線程程序緊密相關的常用性能優化方法與技術。
目標讀者
本書適合有一定Java語言基礎的讀者作為入門多線程編程之用,也適合有一定多線程編程經驗的讀者作為重新梳理知識結構以提升認知層次和參考之用。
如何閱讀本書
本書講解過程中會涉及一些與多線程編程緊密相關的硬件知識,如果讀者對這些知識不太熟悉,可以在閱讀過程中參考或者直接先行閱讀本書第11章前4節的內容。
讀者也可以先閱讀完本書前4章的內容,接著就開始集中實踐。然后邊實踐邊閱讀本書的后續章節,或者在實踐過程中遇到問題時再參考本書后續章節的內容。當然,這種閱讀方法主要是便于讀者盡快上手,并不是說本書后續章節的內容無足輕重。
學習一門新的技術、語言的一個行之有效的方法就是邊學習邊思考、帶著問題在學習過程中尋找答案。因此,本書講解過程中會穿插一些“擴展閱讀”的內容,這些內容多涉及新手在學習多線程編程過程中經常會遇到的一些疑惑和問題。盡管如此,這并不能代替讀者自己主動思考并從書中或者其他途徑尋找答案。
內容簡介:

隨著現代處理器的生產工藝從提升處理器主頻頻率轉向多核化,即在一塊芯片上集成多個處理器內核(Core),多核處理器(Multicore Processor)離我們越來越近了——如今就連智能手機這樣的消費類設備都已配備了4核乃至8核的處理器,更何況商用系統!在此背景下,以往靠單個處理器自身處理能力的提升所帶來的軟件計算性能提升的那種“免費午餐”已不復存在,這使得多線程編程在充分利用計算資源、提高軟件服務質量方面扮演了越來越重要的角色。故而,掌握多線程編程技能對廣大開發人員的重要性亦由此可見一斑。本書以基本概念、原理與方法為主線,輔以豐富的實戰案例和生活化實例,并從Java虛擬機、操作系統和硬件多個層次與角度出發,循序漸進、系統地介紹Java平臺下的多線程編程核心技術及相關工具。

目錄:

第一部分 多線程編程基礎
第1章 走近Java世界中的線程 2
1.1 進程、線程與任務 2
1.2 多線程編程簡介 4
1.2.1 什么是多線程編程 4
1.2.2 為什么使用多線程 4
1.3 Java線程API簡介 5
1.3.1 線程的創建、啟動與運行 5
1.3.2 Runnable接口 9
1.3.3 線程屬性 12
1.3.4 Thread類的常用方法 14
1.3.5 Thread類的一些廢棄方法 16
1.4 無處不在的線程 17
1.5 線程的層次關系 19
1.6 線程的生命周期狀態 21
1.7 線程的監視 22
1.8 多線程編程簡單運用實例 26
*1.9 多線程編程的優勢和風險 27
1.10 本章小結 29
第2章 多線程編程的目標與挑戰 31
2.1 串行、并發與并行 31
2.2 競態 33
2.2.1 二維表分析法:解釋競態的結果 37
2.2.2 競態的模式與競態產生的條件 39
2.3 線程安全性 42
2.4 原子性 43
2.5 可見性 49
2.6 有序性 56
2.6.1 重排序的概念 56
2.6.2 指令重排序 57
2.6.3 存儲子系統重排序 63
2.6.4 貌似串行語義 66
2.6.5 保證內存訪問的順序性 68
2.7 上下文切換 69
2.7.1 上下文切換及其產生原因 69
2.7.2 上下文切換的分類及具體誘因 70
2.7.3 上下文切換的開銷和測量 71
2.8 線程的活性故障 73
2.9 資源爭用與調度 74
2.10 本章小結 77
第3章 Java線程同步機制 80
3.1 線程同步機制簡介 80
3.2 鎖概述 81
3.2.1 鎖的作用 82
3.2.2 與鎖相關的幾個概念 84
3.2.3 鎖的開銷及其可能導致的問題 86
3.3 內部鎖:synchronized關鍵字 86
3.4 顯式鎖:Lock接口 89
3.4.1 顯式鎖的調度 91
3.4.2 顯式鎖與內部鎖的比較 92
3.4.3 內部鎖還是顯式鎖:鎖的選用 95
*3.4.4 改進型鎖:讀寫鎖 95
3.5 鎖的適用場景 99
3.6 線程同步機制的底層助手:內存屏障 99
*3.7 鎖與重排序 102
3.8 輕量級同步機制:volatile關鍵字 105
3.8.1 volatile的作用 105
3.8.2 volatile變量的開銷 111
3.8.3 volatile的典型應用場景與實戰案例 111
3.9 實踐:正確實現看似簡單的單例模式 120
3.10 CAS與原子變量 126
3.10.1 CAS 127
3.10.2 原子操作工具:原子變量類 129
3.11 對象的發布與逸出 135
3.11.1 對象的初始化安全:重訪final與static 137
3.11.2 安全發布與逸出 142
3.12 本章小結 143
第4章 牛刀小試:玩轉線程 148
4.1 挖掘可并發點 148
4.2 新戰場上的老武器:分而治之 148
4.3 基于數據的分割實現并發化 149
4.4 基于任務的分割實現并發化 158
4.4.1 按任務的資源消耗屬性分割 159
4.4.2 實戰案例的啟發 169
4.4.3 按處理步驟分割 171
4.5 合理設置線程數 172
4.5.1 Amdahl’s定律 172
4.5.2 線程數設置的原則 173
4.6 本章小結 177
第5章 線程間協作 179
5.1 等待與通知:wait/notify 179
5.1.1 wait/notify的作用與用法 180
5.1.2 wait/notify的開銷及問題 188
5.1.3 Object.notify()/notifyAll()的選用 191
*5.1.4 wait/notify與Thread.join() 191
5.2 Java條件變量 192
5.3 倒計時協調器:CountDownLatch 198
5.4 柵欄(CyclicBarrier) 203
5.5 生產者—消費者模式 210
5.5.1 阻塞隊列 213
5.5.2 限購:流量控制與信號量(Semaphore) 216
*5.5.3 管道:線程間的直接輸出與輸入 218
5.5.4 一手交錢,一手交貨:雙緩沖與Exchanger 221
5.5.5 一個還是一批:產品的粒度 223
5.5.6 再探線程與任務之間的關系 224
5.6 對不起,打擾一下:線程中斷機制 225
5.7 線程停止:看似簡單,實則不然 228
5.7.1 生產者—消費者模式中的線程停止 233
5.7.2 實踐:Web應用中的線程停止 233
5.8 本章小結 236
第6章 保障線程安全的設計技術 240
*6.1 Java運行時存儲空間 240
6.2 大公無私:無狀態對象 243
6.3 以“不變”應萬變:不可變對象 248
6.4 我有我地盤:線程特有對象 254
6.4.1 線程特有對象可能導致的問題及其規避 258
6.4.2 線程特有對象的典型應用場景 264
6.5 裝飾器模式 265
6.6 并發集合 267
6.7 本章小結 270
第7章 線程的活性故障 273
7.1 鷸蚌相爭:死鎖 273
7.1.1 死鎖的檢測 274
7.1.2 死鎖產生的條件與規避 283
7.1.3 死鎖的恢復 296
7.2 沉睡不醒的睡美人:鎖死 301
7.2.1 信號丟失鎖死 301
7.2.2 嵌套監視器鎖死 301
7.3 巧婦難為無米之炊:線程饑餓 307
7.4 屢戰屢敗,屢敗屢戰:活鎖 307
7.5 本章小結 308
第8章 線程管理 310
8.1 線程組 310
8.2 可靠性:線程的未捕獲異常與監控 311
8.3 有組織有紀律:線程工廠 316
8.4 線程的暫掛與恢復 318
8.5 線程的高效利用:線程池 320
8.5.1 任務的處理結果、異常處理與取消 326
8.5.2 線程池監控 329
8.5.3 線程池死鎖 330
8.5.4 工作者線程的異常終止 330
8.6 本章小結 331
第9章 Java異步編程 333
9.1 同步計算與異步計算 333
9.2 Java Executor框架 336
9.2.1 實用工具類Executors 337
9.2.2 異步任務的批量執行:CompletionService 339
9.3 異步計算助手:FutureTask 344
9.3.1 實踐:實現XML文檔的異步解析 345
9.3.2 可重復執行的異步任務 349
9.4 計劃任務 352
9.5 本章小結 358
第10章 Java多線程程序的調試與測試 360
10.1 多線程程序的調試技巧 360
10.1.1 使用監視點 360
10.1.2 設置暫掛策略 361
10.2 多線程程序的測試 363
10.2.1 可測試性 364
10.2.2 靜態檢查工具:FindBugs 369
10.2.3 多線程程序的代碼復審 370
10.2.4 多線程程序的單元測試:JCStress 372
10.3 本章小結 375
第二部分 多線程編程進階
第11章 多線程編程的硬件基礎與Java內存模型 378
11.1 填補處理器與內存之間的鴻溝:高速緩存 378
11.2 數據世界的交通規則:緩存一致性協議 382
11.3 硬件緩沖區:寫緩沖器與無效化隊列 386
11.3.1 存儲轉發 388
11.3.2 再探內存重排序 388
11.3.3 再探可見性 391
11.4 基本內存屏障 392
11.5 Java同步機制與內存屏障 395
11.5.1 volatile關鍵字的實現 395
11.5.2 synchronized關鍵字的實現 397
11.5.3 Java虛擬機對內存屏障使用的優化 398
11.5.4 final關鍵字的實現 398
11.6 Java內存模型 399
11.6.1 什么是Java內存模型 400
11.6.2 happen(s)-before關系 401
11.6.3 再探對象的安全發布 407
11.6.4 JSR 133 411
11.7 共享變量與性能 411
11.8 本章小結 411

第12章 Java多線程程序的性能調校 415
12.1 Java虛擬機對內部鎖的優化 415
12.1.1 鎖消除 415
12.1.2 鎖粗化 417
12.1.3 偏向鎖 419
12.1.4 適應性鎖 420
12.2 優化對鎖的使用 421
12.2.1 鎖的開銷與鎖爭用監視 421
12.2.2 使用可參數化鎖 424
12.2.3 減小臨界區的長度 428
12.2.4 減小鎖的粒度 432
12.2.5 考慮鎖的替代品 438
12.3 減少系統內耗:上下文切換 438
12.4 多線程編程的“三十六計”:多線程設計模式 440
12.5 性能的隱形殺手:偽共享 441
12.5.1 Java對象內存布局 442
12.5.2 偽共享的偵測與消除 445
12.6 本章小結 454
Web參考資源 457
參考文獻 463
序: