開啟主選單

求真百科

JAVA並發編程之美

JAVA並發編程之美》,翟陸續 著,出版社: 電子工業出版社。

電子工業出版社成立於1982年10月,是工業和信息化部直屬的科技與教育出版社[1],享有「全國優秀出版社」、「講信譽、重服務」的優秀出版社、「全國版權貿易先進單位」、首屆中國出版政府獎「先進出版單位」等榮譽稱號[2]

目錄

內容簡介

並發編程相比 Java 中其他知識點的學習門檻較高,從而導致很多人望而卻步。但無論是職場面試,還是高並發/ 高流量系統的實現,卻都離不開並發編程,於是能夠真正掌握並發編程的人成為了市場迫切需求的人才。本書通過圖文結合、通俗易懂的講解方式幫助大家完成多線程並發編程從入門到實踐的飛躍!全書分為三部分,靠前部分為Java 並發編程基礎篇,主要講解Java 並發編程的基礎知識、線程有關的知識和並發編程中的其他相關概念,這些知識在不錯篇都會有所使用,掌握了本篇的內容,就為學習不錯篇奠定了基礎;第二部分為Java 並發編程不錯篇,講解了Java 並發包中核心組件的實現原理,讓讀者知其然,也知其所以然,熟練掌握本篇內容,對我們在日常開發高並發、高流量的系統時會大有裨益;第三部分為Java 並發編程實踐篇,主要講解並發組件的使用方法,以及在使用過程中容易遇到的問題和解決方法。

目錄

第一部分 Java 並發編程基礎篇 第1 章 並發編程線程基礎 / 2 1.1 什麼是線程 / 2 1.2 線程創建與運行 / 3 1.3 線程通知與等待 / 6 1.4 等待線程執行終止的join 方法 / 16 1.5 讓線程睡眠的sleep 方法 / 19 1.6 讓出CPU 執行權的yield 方法 / 24 1.8 理解線程上下文切換 / 30 1.9 線程死鎖 / 30 1.9.1 什麼是線程死鎖 / 30 1.9.2 如何避免線程死鎖 / 33 1.10 守護線程與用戶線程 / 35 1.11 ThreadLocal / 39 1.11.1 ThreadLocal 使用示例 / 40 1.11.2 ThreadLocal 的實現原理 / 42 1.11.3 ThreadLocal 不支持繼承性 / 45 1.11.4 InheritableThreadLocal 類 / 46 第2 章 並發編程的其他基礎知識 / 50 2.1 什麼是多線程並發編程 / 50 2.2 為什麼要進行多線程並發編程 / 51 2.3 Java 中的線程安全問題 / 51 2.4 Java 享變量的內存可見性問題 / 52 2.5 Java 中的synchronized 關鍵字 / 54 2.5.1 synchronized 關鍵字介紹 / 54 2.5.2 synchronized 的內存語義 / 55 2.6 Java 中的volatile 關鍵字 / 55 2.7 Java 中的原子性操作 / 57 2.8 Java 中的CAS 操作 / 59 2.9 Unsafe 類 / 59 2.9.1 Unsafe 類中的重要方法 / 59 2.9.2 如何使用Unsafe 類 / 61 2.10 Java 指令重排序 / 65 2.11 偽共享 / 67 2.11.1 什麼是偽共享 / 67 2.11.2 為何會出現偽共享 / 68 2.11.3 如何避免偽共享 / 70 2.11.4 小結 / 72 2.12 的概述 / 72 2.12.1 樂觀鎖與悲觀鎖 / 72 2.12.2 公平鎖與非公平鎖 / 75 2.12.3 獨占鎖與共享鎖 / 75 2.12.4 什麼是可重入鎖 / 76 2.12.5 自旋鎖 / 77 2.13 總結 / 77 第二部分 Java 並發編程高級篇 第3 章 Java 並發包中ThreadLocalRandom 類原理剖析 / 80 3.1 Random 類及其局限性 / 80 3.2 ThreadLocalRandom / 82 3.3 源碼分析 / 84 3.4 總結 / 87 第4 章 Java 並發包中原子操作類原理剖析 4.1 原子變量操作類 / 88 4.2 JDK 8 新增的原子操作類LongAdder / 93 4.2.1 LongAdder 簡單介紹 / 93 4.2.2 LongAdder 代碼分析 / 95 4.2.3 小結 / 101 4.3 LongAccumulator 類原理探究 / 102 4.4 總結 / 104 第5 章 Java 並發包中並發List 源碼剖析 / 105 5.1 介紹 / 105 5.2 主要方法源碼解析 / 106 5.2.1 初始化 / 106 5.2.2 添加元素 / 106 5.2.3 獲取指定位置元素 / 108 5.2.4 修改指定元素 / 109 5.2.5 刪除元素 / 110 5.2.6 弱一致性的迭代器 / 111 5.3 總結 / 114 第6 章 Java 並發包中鎖原理剖析 / 115 6.1 LockSupport 工具類 / 115 6.2 抽象同步隊列AQS 概述 / 122 6.2.1 AQS――鎖的底層支持 / 122 6.2.2 AQS――條件變量的支持 / 128 6.2.3 基於AQS 實現自定義同步器 / 131 6.3 獨占鎖ReentrantLock 的原理 / 136 6.3.1 類圖結構 / 136 6.3.2 獲取鎖 / 137 6.3.3 釋放鎖 / 142 6.3.4 案例介紹 / 143 6.3.5 小結 / 145 6.4 讀寫鎖ReentrantReadWriteLock 的原理 / 145 6.4.1 類圖結構 / 145 6.4.2 寫鎖的獲取與釋放 / 147 6.4.3 讀鎖的獲取與釋放 / 151 6.4.5 小結 / 158 6.5 JDK 8 中新增的StampedLock 鎖探究 / 158 6.5.1 概述 / 158 6.5.2 案例介紹 / 160 6.5.3 小結 / 164 第7 章 Java 並發包中並發隊列原理剖析 / 165 7.1 ConcurrentLinkedQueue 原理探究 / 165 7.1.1 類圖結構 / 165 7.1.2 ConcurrentLinkedQueue 原理介紹 / 166 7.1.3 小結 / 181 7.2 LinkedBlockingQueue 原理探究 / 182 7.2.1 類圖結構 / 182 7.2.2 LinkedBlockingQueue 原理介紹 / 185 7.2.3 小結 / 194 7.3 ArrayBlockingQueue 原理探究 / 195 7.3.1 類圖結構 / 195 7.3.2 ArrayBlockingQueue 原理介紹 / 197 7.3.3 小結 / 202 7.4 PriorityBlockingQueue 原理探究 / 203 7.4.1 介紹 / 203 7.4.2 PriorityBlockingQueue 類圖結構 / 203 7.4.3 原理介紹 / 205 7.4.4 案例介紹 / 214 7.4.5 小結 / 216 7.5 DelayQueue 原理探究 / 217 7.5.1 DelayQueue 類圖結構 / 217 7.5.2 主要函數原理講解 / 219 7.5.3 案例介紹 / 222 7.5.4 小結 / 224 第8 章 Java 並發包中線程池ThreadPoolExecutor 原理探究 / 225 8.1 介紹 / 225 8.2 類圖介紹 / 225 8.3 源碼分析 / 230 8.3.1 public void execute(Runnable command) / 230 8.3.2 工作線程Worker 的執行 / 235 8.3.3 shutdown 操作 / 238 8.3.4 shutdownNow 操作 / 240 8.3.5 awaitTermination 操作 / 241 8.4 總結 / 242 第9 章 Java 並發包中ScheduledThreadPoolExecutor 原理探究 / 243 9.1 介紹 / 243 9.2 類圖介紹 / 243 9.3 原理剖析 / 245 9.3.1 schedule(Runnable command, long delay,TimeUnit unit) 方法 / .246 9.3.2 scheduleWithFixedDelay(Runnable command,long initialDelay, long delay, TimeUnit unit) 方法 / 252 9.3.3 scheduleAtFixedRate(Runnable command,long initialDelay,long period, TimeUnit unit) 方法 / 254 9.4 總結 / 255 第10 章 Java 並發包中線程同步器原理剖析 / 256 10.1 CountDownLatch 原理剖析 / 256 10.1.1 案例介紹 / 256 10.1.2實現原理探究/259 10.1.3小結/263 10.2迴環屏障CyclicBarrier原理探究/264 10.2.1案例介紹/264 10.2.2實現原理探究/268 10.2.3小結/272 11.1ArrayBlockingQueue的使用/284 11.1.1異步日誌打印模型概述/284 11.1.2異步日誌與具體實現/285 11.1.3小結/293 11.2Tomcat的NioEndPoint中ConcurrentLinkedQueue的使用/293 11.2.1生產者――Acceptor線程/294 11.2.2消費者――Poller線程/298 11.2.3小結/300 11.3並發組件ConcurrentHashMap使用注意事項/300 11.4SimpleDateFormat是線程不安全的/304 11.4.1問題復現/304 11.4.2問題分析/305 11.4.3小結/309 11.5使用Timer時需要注意的事情/309 11.5.1問題的產生/309 11.5.2Timer實現原理分析/310 11.5.3小結/313 11.6對需要復用但是會被下游修改的參數要進行深複製/314 11.6.1問題的產生/314 11.6.2問題分析/316 11.6.3小結/318 11.7創建線程和線程池時要指定與業務相關的名稱/319 11.7.1創建線程需要有線程名/319 11.7.2創建線程池時也需要指定線程池的名稱/321 11.7.3小結/325 11.8使用線程池的情況下當程序結束時記得調用shutdown關閉線程池/325 11.8.1問題復現/325 11.8.2問題分析/327 11.8.3小結/329 11.9線程池使用FutureTask時需要注意的事情/329 11.9.1問題復現/329 11.9.2問題分析/332 11.9.3小結335 11.10使用ThreadLocal不當可能會導致內存泄漏/336 11.10.1為何會出現內存泄漏/336 11.10.2在線程池中使用ThreadLocal導致的內存泄漏/339 11.10.3在Tomcat的Servlet中使用ThreadLocal導致內存泄漏/341 11.10.4小結/344 11.11總結/344

參考文獻

  1. 我國出版社的等級劃分和分類標準,知網出書,2021-03-01
  2. 關於我們,電子工業出版社