幫助中心 | 我的帳號 | 關於我們

Java併發實現原理(JDK源碼剖析)

  • 作者:余春龍|責編:宋亞東
  • 出版社:電子工業
  • ISBN:9787121379727
  • 出版日期:2020/04/01
  • 裝幀:平裝
  • 頁數:246
人民幣:RMB 89 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書全面而系統地剖析了Java Concurrent包中的每一個部分,對併發的實現原理進行了深入的探討。全書分為8章,第1章從基礎的多線程知識講起,釐清多線程中容易誤解的知識點,探究背後的原理,包括內存重排序、happen-before、內存屏障等;第2?8章,從簡單到複雜,逐個剖析Concurrent包的每個部分,包括原子類、鎖、同步工具類、併發容器、線程池、ForkJoinPool和CompletableFuture。
    本書適合有一定Java開發經驗的工程師、架構師閱讀。通過閱讀本書,讀者可以對多線程編程形成一個「深刻而直觀」的認識,而不是僅僅停留在概念和理論層面。

作者介紹
余春龍|責編:宋亞東
    余春龍,中科院軟體所電腦碩士畢業。熱衷於高併發高可用架構、業務建模、領域驅動設計,在十年的工作中,經歷過遊戲、社交、廣告、電商等各種類型的項目,積累了較豐富的工程經驗。

目錄
第1章  多線程基礎
  1.1  線程的優雅關閉
    1.1.1  stop與destory函數
    1.1.2  守護線程
    1.1.3  設置關閉的標誌位
  1.2  InterruptedException與interrupt()函數
    1.2.1  什麼情況下會拋出Interrupted異常
    1.2.2  輕量級阻塞與重量級阻塞
    1.2.3  t.isInterrupted()與Thread.interrupted()的區別
  1.3  synchronized關鍵字
    1.3.1  鎖的對象是什麼
    1.3.2  鎖的本質是什麼
    1.3.3  synchronized實現原理
  1.4  wait與notify
    1.4.1  生產者?消費者模型
    1.4.2  為什麼必須和synchronized一起使用
    1.4.3  為什麼wait()的時候必須釋放鎖
    1.4.4  wait()與notify()的問題
  1.5  volatile關鍵字
    1.5.1  64位寫入的原子性(Half Write)
    1.5.2  內存可見性
    1.5.3  重排序:DCL問題
  1.6  JMM與happen-before
    1.6.1  為什麼會存在「內存可見性」問題
    1.6.2  重排序與內存可見性的關係
    1.6.3  as-if-serial語義
    1.6.4  happen-before是什麼
    1.6.5  happen-before的傳遞性
    1.6.6  C++中的volatile關鍵字
    1.6.7  JSR-133對volatile語義的增強
  1.7  內存屏障
    1.7.1  Linux中的內存屏障
    1.7.2  JDK中的內存屏障
    1.7.3  volatile實現原理
  1.8  final關鍵字
    1.8.1  構造函數溢出問題
    1.8.2  final的happen-before語義
    1.8.3  happen-before規則總結
  1.9  綜合應用:無鎖編程
    1.9.1  一寫一讀的無鎖隊列:內存屏障
    1.9.2  一寫多讀的無鎖隊列:volatile關鍵字
    1.9.3  多寫多讀的無鎖隊列:CAS
    1.9.4  無鎖棧
    1.9.5  無鎖鏈表
第2章  Atomic類
  2.1  AtomicInteger和AtomicLong
    2.1.1  悲觀鎖與樂觀鎖
    2.1.2  Unsafe 的CAS詳解
    2.1.3  自旋與阻塞
  2.2  AtomicBoolean和AtomicReference

    2.2.1  為什麼需要AtomicBoolean
    2.2.2  如何支持boolean和double類型
  2.3  AtomicStampedReference和AtomicMarkable Reference
    2.3.1  ABA問題與解決辦法
    2.3.2  為什麼沒有AtomicStampedInteger或AtomictStampedLong
    2.3.3  AtomicMarkableReference
  2.4  AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceField Updater
    2.4.1  為什麼需要AtomicXXXFieldUpdater
    2.4.2  限制條件
  2.5  AtomicIntegerArray、AtomicLongArray和AtomicReferenceArray
    2.5.1  使用方式
    2.5.2  實現原理
  2.6  Striped64與LongAdder
    2.6.1  LongAdder原理
    2.6.2  最終一致性
    2.6.3  偽共享與緩存行填充
    2.6.4  LongAdder核心實現
    2.6.5  LongAccumulator
    2.6.6  DoubleAdder與DoubleAccumulator
第3章  Lock與Condition
  3.1  互斥鎖
    3.1.1  鎖的可重入性
    3.1.2  類繼承層次
    3.1.3  鎖的公平性vs.非公平性
    3.1.4  鎖實現的基本原理
    3.1.5  公平與非公平的lock()實現差異
    3.1.6  阻塞隊列與喚醒機制
    3.1.7  unlock()實現分析
    3.1.8  lockInterruptibly()實現分析
    3.1.9  tryLock()實現分析
  3.2  讀寫鎖
    3.2.1  類繼承層次
    3.2.2  讀寫鎖實現的基本原理
    3.2.3  AQS的兩對模板方法
    3.2.4  WriteLock公平vs.非公平實現
    3.2.5  ReadLock公平vs.非公平實現
  3.3  Condition
    3.3.1  Condition與Lock的關係
    3.3.2  Condition的使用場景
    3.3.3  Condition實現原理
    3.3.4  await()實現分析
    3.3.5  awaitUninterruptibly()實現分析
    3.3.6  notify()實現分析
  3.4  StampedLock
    3.4.1  為什麼引入StampedLock
    3.4.2  使用場景
    3.4.3  「樂觀讀」的實現原理
    3.4.4  悲觀讀/寫:「阻塞」與「自旋」策略實現差異
第4章  同步工具類
  4.1  Semaphore

  4.2  CountDownLatch
    4.2.1  CountDownLatch使用場景
    4.2.2  await()實現分析
    4.2.3  countDown()實現分析
  4.3  CyclicBarrier
    4.3.1  CyclicBarrier使用場景
    4.3.2  CyclicBarrier實現原理
  4.4  Exchanger
    4.4.1  Exchanger使用場景
    4.4.2  Exchanger實現原理
    4.4.3  exchange(V x)實現分析
  4.5  Phaser
    4.5.1  用Phaser替代CyclicBarrier和CountDownLatch
    4.5.2  Phaser新特性
    4.5.3  state變數解析
    4.5.4  阻塞與喚醒(Treiber Stack)
    4.5.5  arrive()函數分析
    4.5.6  awaitAdvance()函數分析
第5章  併發容器
  5.1  BlockingQueue
    5.1.1  ArrayBlockingQueue
    5.1.2  LinkedBlockingQueue
    5.1.3  PriorityBlockingQueue
    5.1.4  DelayQueue
    5.1.5  SynchronousQueue
  5.2  BlockingDeque
  5.3  CopyOnWrite
    5.3.1  CopyOnWriteArrayList
    5.3.2  CopyOnWriteArraySet
  5.4  ConcurrentLinkedQueue/Deque
  5.5  ConcurrentHashMap
    5.5.1  JDK 7中的實現方式
    5.5.2  JDK 8中的實現方式
  5.6  ConcurrentSkipListMap/Set
    5.6.1  ConcurrentSkipListMap
    5.6.2  ConcurrentSkipListSet
第6章  線程池與Future
  6.1  線程池的實現原理
  6.2  線程池的類繼承體系
  6.3  ThreadPoolExecutor
    6.3.1  核心數據結構
    6.3.2  核心配置參數解釋
    6.3.3  線程池的優雅關閉
    6.3.4  任務的提交過程分析
    6.3.5  任務的執行過程分析
    6.3.6  線程池的4種拒絕策略
  6.4  Callable與Future
  6.5  ScheduledThreadPool Executor
    6.5.1  延遲執行和周期性執行的原理
    6.5.2  延遲執行

    6.5.3  周期性執行
  6.6  Executors工具類
第7章  ForkJoinPool
  7.1  ForkJoinPool用法
  7.2  核心數據結構
  7.3  工作竊取隊列
  7.4  ForkJoinPool狀態控制
    7.4.1  狀態變數ctl解析
    7.4.2  阻塞棧Treiber Stack
    7.4.3  ctl變數的初始值
    7.4.4  ForkJoinWorkerThread狀態與個數分析
  7.5  Worker線程的阻塞-喚醒機制
    7.5.1  阻塞-入棧
    7.5.2  喚醒-出棧
  7.6  任務的提交過程分析
    7.6.1  內部提交任務pushTask
    7.6.2  外部提交任務addSubmission
  7.7  工作竊取演算法:任務的執行過程分析
    7.7.1  順序鎖 SeqLock
    7.7.2  scanGuard解析
  7.8  ForkJoinTask的fork/join
    7.8.1  fork
    7.8.2  join的層層嵌套
  7.9  ForkJoinPool的優雅關閉
    7.9.1  關鍵的terminate變數
    7.9.2  shutdown()與shutdownNow()的區別
第8章  CompletableFuture
  8.1  CompletableFuture用法
    8.1.1  最簡單的用法
    8.1.2  提交任務:runAsync與supplyAsync
    8.1.3  鏈式的CompletableFuture:thenRun、thenAccept和thenApply
    8.1.4  CompletableFuture的組合:thenCompose與thenCombine
    8.1.5  任意個CompletableFuture的組合
  8.2  四種任務原型
  8.3  CompletionStage介面
  8.4  CompletableFuture內部原理
    8.4.1  CompletableFuture的構造:ForkJoinPool
    8.4.2  任務類型的適配
    8.4.3  任務的鏈式執行過程分析
    8.4.4  thenApply與thenApplyAsync的區別
  8.5  任務的網狀執行:有向無環圖
  8.6  allOf內部的計算圖分析

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032