實戰Java高並發程序設計 实战Java高并发程序设计

葛一鳴, 郭超

  • 出版商: 電子工業
  • 出版日期: 2015-10-01
  • 定價: $414
  • 售價: 8.5$352
  • 語言: 簡體中文
  • 頁數: 339
  • 裝訂: 平裝
  • ISBN: 7121273047
  • ISBN-13: 9787121273049
  • 相關分類: Java
  • 下單後立即進貨 (約4週~6週)

買這商品的人也買了...

相關主題

商品描述

<內容簡介>

在過去單核CPU時代,單任務在一個時間點只能執行單一程序,隨著多核CPU的發展,並行程序開發就顯得尤為重要。
本書主要介紹基於Java的並行程序設計基礎、思路、方法和實戰。1,立足於並發程序基礎,詳細介紹Java中進行並行程序設計的基本方法。第二,進一步詳細介紹JDK中對並行程序的強大支持,幫助讀者快速、穩健地進行並行程序開發。第三,詳細討論有關“鎖”的優化和提高並行程序性能級別的方法和思路。第四,介紹並行的基本設計模式及Java 8對並行程序的支持和改進。第五,介紹高並發框架Akka的使用方法。最後,詳細介紹並行程序的調試方法。

<目錄>
第1章走入並行世界
1.1何去何從的並行計算
1.1.1忘掉那該死的並行
1.1.2可怕的現實:摩爾定律的失效
1.1.3柳暗花明:不斷地前進
1.1.4光明或是黑暗
1.2你必須知道的幾個概念
1.2.1同步(Synchronous)和異步(Asynchronous)
1.2.2並發(Concurrency)和並行(Parallelism)
1.2.3臨界區
1.2.4阻塞(Blocking)和非阻塞(Non—Blocking)
1.2. 5死鎖(Deadlock)、飢餓(Starvation)和活鎖(Livelock)
1.3並發級別
1.3.1阻塞(Blocking)
1.3.2無飢餓(Starvation—Free)
1.3.3無障礙(Obstruction—Free)
1.3.4無鎖(Lock—Free)
1.3.5無等待(Wait—Free)
1.4有關並行的兩個重要定律
1.4.1Amdahl定律
1.4.2Gustafson定律
1.4.3Amdahl定律和Gustafson定律是否相互矛盾
1.5回到Java:JMM
1.5 .1原子性(Atomicity)
1.5.2可見性(Visibility)
1.5.3有序性(Ordering)
1.5.4哪些指令不能重排:Happen—Before規則
1.6參 ​​考文獻
第2章Java並行程序基礎
2.1有關線程你必須知道的事
2.2初始線程:線程的基本操作
2.2.1新建線程
2.2.2終止線程
2.2.3線程中斷
2.2.4等待(wait)和通知(notify)
2.2.5掛起(suspend)和繼續執行(resume)線程
2.2.6等待線程結束(join)和謙讓(yield)
2.3volatile與Java內存模型(JMM)
2.4分門別類的管理:線程組
2.5駐守後台:守護線程(Daemon)
2.6先乾重要的事:線程優先級
2.7線程安全的概念與synchronized
2.8程序中的幽靈:隱蔽的錯誤
2.8.1無提示的錯誤案例
2.8.2並發下的ArrayList
2.8.3並發下詭異的HashMap
2.8.4初學者常見問題:錯誤的加鎖
2.9參考文獻
第3章JDK並發包
3.1多線程的團隊協作:同步控制
3.1.1synchronized的功能擴展:重入鎖
3.1.2重入鎖的好搭檔:Condition條件
3.1.3允許多個線程同時訪問:信號量(Semaphore)
3.1.4ReadWriteLock讀寫鎖
3.1.5倒計時器:CountDownLatch
3.1.6循環柵欄:CyclicBarrier
3.1.7線程阻塞工具類:LockSupport
3.2線程復用:線程池
3.2.1什麼是線程池
3.2.2不要重複發明輪子:JDK對線程池的支持
3.2.3刨根究底:核心線程池的內部實現
3.2.4超負載了怎麼辦:拒絕策略
3.2.5自定義線程創建:ThreadFactory
3.2.6我的應用我做主:擴展線程池
3.2.7合理的選擇:優化線程池線程數量
3.2.8堆棧去哪裡了:在線程池中尋找堆棧
3.2.9分而治之:Fork/Join框架
3.3不要重複發明輪子:JDK的並發容器
3.3.1超好用的工具類:並發集合簡介
3.3.2線程安全的HashMap
3.3.3有關List的線程安全
3.3.4高效讀寫的隊列:深度剖析ConcurrentLinkedQueue
3.3.5高效讀取:不變模式下的CopyOnWriteArrayList
3.3.6數據共享通道:BlockingQueue
3.3.7隨機數據結構:跳錶(SkipList)
3.4參考資料
第4章鎖的優化及註意事項
4.1有助於提高“鎖”性能的幾點建議
4.1.1減小鎖持有時間
4.1.2減小鎖粒度
4.1.3讀寫分離鎖來替換獨占鎖
4.1.4鎖分離
4.1.5鎖粗化
4.2Java虛擬機對鎖優化所做的努力
4.2.1鎖偏向
4.2.2輕量級鎖
4.2.3自旋鎖
4.2.4鎖消除
4.3人手一支筆:ThreadLocal
4.3.1ThreadLocal的簡單使用
4.3.2ThreadLocal的實現原理
4.3.3對性能有何幫助
4.4無鎖
4.4.1與眾不同的並發策略:比較交換(CAS)
4.4.2無鎖的線程安全整數:AtomicInteger
4.4.3Java中的指針:Unsafe類
4.4.4無鎖的對象引用:AtomicReference
4.4.5帶有時間戳的對象引用:AtomicStampedReference
4.4.6數組也能無鎖:AtomicIntegerArray
4.4.7讓普通變量也享受原子操作:AtomicIntegerFieldUpdater
4.4.8挑戰無鎖算法:無鎖的Vector實現
4.4 .9讓線程之間互相幫助:細看SynchronousQueue的實現
4.5有關死鎖的問題
4.6參考文獻
第5章並行模式與算法
5.1探討單例模式
5.2不變模式
5.3生產者—消費者模式
5.4高性能的生產者—消費者:無鎖的實現
5.4.1無鎖的緩存框架:Disruptor
5.4.2用Disruptor實現生產者—消費者案例
5.4.3提高消費者的響應時間:選擇合適的策略
5.4.4CPUCache的優化:解決偽共享問題
5.5Future模式
5.5.1Future模式的主要角色
5.5.2Future模式的簡單實現
5.5.3JDK中的Future模式
5.6並行流水線
5.7並行搜索
5.8並行排序
5.8.1分離數據相關性:奇偶交換排序
5.8.2改進的插入排序:希爾排序
5.9並行算法:矩陣乘法
5.10準備好了再通知我:網絡NIO
5.10.1基於Socket的服務端的多線程模式
5.10.2使用NIO進行網絡編程
5.10.3使用NIO來實現客戶端
5.11讀完了再通知我:AIO
5.11.1AIOEchoServer的實現
5.11.2AIOEcho客戶端實現
5.12參考文獻
第6章Java8與並發
6.1Java8的函數式編程簡介
6.1.1函數作為一等公民
6.1. 2無副作用
6.1.3申明式的(Declarative)
6.1.4不變的對象
6.1.5易於並行
6.1.6更少的代碼
6.2函數式編程基礎
6.2.1FunctionalInterface註釋
6.2.2接口默認方法
6.2.3lambda表達式
6.2.4方法引用
6.3一步一步走入函數式編程
6.4並行流與並行排序
6.4.1使用並行流過濾數據
6.4.2從集合得到並行流
6.4.3並行排序
6.5增強的Future:CompletableFuture
6.5.1完成了就通知我
6.5.2異步執行任務
6.5.3流式調用
6.5.4CompletableFuture中的異常處理
6.5.5組合多個CompletableFuture
6.6讀寫鎖的改進:StampedLock
6.6.1StampedLock使用示例
6.6.2StampedLock的小陷阱
6.6.3有關StampedLock的實現思想
6.7原子類的增強
6.7.1更快的原子類:LongAdder
6.7.2LongAdder的功能增強版:LongAccumulator
6.8參考文獻
第7章使用Akka構建高並發程序
7.1新並發模型:Actor
7.2Akka之HelloWorld
7.3有關消息投遞的一些說明
7.4Actor的生命週期
7.5監督策略
7.6選擇Actor
7.7消息收件箱(Inbox)
7.8消息路由
7.9Actor的內置狀態轉換
7.10詢問模式:Actor中的Future
7.11多個Actor同時修改數據:Agent
7.12像數據庫一樣操作內存數據:軟件事務內存
7.13一個有趣的例子:並發粒子群的實現
7.13.1什麼是粒子群算法
7.13.2粒子群算法的計算過程
7.13.3粒子群算法能做什麼
7.13.4使用Akka實現粒子群
7.14參考文獻
第8章並行程序調試
8.1準備實驗樣本
8.2正式起航
8.3掛起整個虛擬機
8.4調試進入ArrayList內部