發表於2024-11-22
書名: | (正版特價)Java多綫程編程核心技術|229177 |
圖書定價: | 69元 |
圖書作者: | 高洪岩 |
齣版社: | 機械工業齣版社 |
齣版日期: | 2015/6/1 0:00:00 |
ISBN號: | 9787111502067 |
開本: | 16開 |
頁數: | 306 |
版次: | 1-1 |
作者簡介 |
高洪岩某世界500強企業高級項目經理,10餘年項目管理與開發經驗,10年Java相關開發經驗,深諳Java技術開發難點與要點,擁有良好的技術素養和豐富的實踐經驗。精通J2EE核心技術、基於EJB的分布式係統開發、Android移動開發、智能報錶、多綫程及高並發等相關的技術內容,近期持續關注並發相關的前沿技術。喜歡技術與教育相結閤的方式共享知識,以共同提高。生活中喜歡攝影, 對輪滑,旅遊,航模亦興趣濃厚。 |
內容簡介 |
資深Java專傢10年經驗總結,全程案例式講解,首本全麵介紹Java多綫程編程技術的專著。本書以淺白的措辭,結閤大量實例,全麵講解Java多綫程編程中的並發訪問、綫程間通信、鎖等最難突破的核心技術與應用實踐。 全書共7章。第1章講解瞭Java多綫程的基礎,重點介紹綫程類的核心API的使用。第2章講解對並發訪問的控製,即如何寫齣綫程安全的程序。第3章介紹綫程間通信,以提高CPU利用率和係統間的交互,同時增強對綫程任務的把控與監督。第4章講解Lock對象,以更好實現並發訪問時的同步處理。第5章講解移動開發中使用較多的定時器類的多綫程技術,這是計劃/任務執行裏很重要的技術點。第6章講解如何安全、正確地將單例模式與多綫程技術相結閤,避免實際應用中可能會齣現的麻煩。第7章將前麵被遺漏的案例在本章節中進行補充,盡量做到不齣現技術空白點。 |
目錄 |
前 言 第1章 Java多綫程技能 1 1.1 進程和多綫程的概念及綫程的優點 1 1.2 使用多綫程 3 1.2.1 繼承Thread類 4 1.2.2 實現Runnable接口 8 1.2.3 實例變量與綫程安全 9 1.2.4 留意i--與System.out.println()的異常 14 1.3 currentThread()方法 16 1.4 isAlive()方法 18 1.5 sleep()方法 20 1.6 getId()方法 22 1.7 停止綫程 23 1.7.1 停止不瞭的綫程 23 1.7.2 判斷綫程是否是停止狀態 24 1.7.3 能停止的綫程——異常法 27 1.7.4 在沉睡中停止 30 1.7.5 能停止的綫程——暴力停止 32 1.7.6 方法stop()與java.lang.ThreadDeath異常 33 1.7.7 釋放鎖的不良後果 34 1.7.8 使用return停止綫程 35 1.8 暫停綫程 36 1.8.1 suspend與resume方法的使用 36 1.8.2 suspend與resume方法的缺點——獨占 38 1.8.3 suspend與resume方法的缺點——不同步 40 1.9 yield方法 42 1.10 綫程的優先級 43 1.10.1 綫程優先級的繼承特性 43 1.10.2 優先級具有規則性 44 1.10.3 優先級具有隨機性 47 1.10.4 看誰運行得快 49 1.11 守護綫程 50 1.12 本章小結 51 第2章 對象及變量的並發訪問 52 2.1 synchronized同步方法 52 2.1.1 方法內的變量為綫程安全 53 2.1.2 實例變量非綫程安全 54 2.1.3 多個對象多個鎖 57 2.1.4 synchronized方法與鎖對象 59 2.1.5 髒讀 63 2.1.6 synchronized鎖重入 65 2.1.7 齣現異常,鎖自動釋放 68 2.1.8 同步不具有繼承性 69 2.2 synchronized同步語句塊 71 2.2.1 synchronized方法的弊端 72 2.2.2 synchronized同步代碼塊的使用 74 2.2.3 用同步代碼塊解決同步方法的弊端 76 2.2.4 一半異步,一半同步 76 2.2.5 synchronized代碼塊間的同步性 78 2.2.6 驗證同步synchronized(this)代碼塊是鎖定當前對象的 80 2.2.7 將任意對象作為對象監視器 82 2.2.8 細化驗證3個結論 91 2.2.9 靜態同步synchronized方法與synchronized(class)代碼塊 96 2.2.10 數據類型String的常量池特性 102 2.2.11 同步synchronized方法無限等待與解決 105 2.2.12 多綫程的死鎖 107 2.2.13 內置類與靜態內置類 109 2.2.14 內置類與同步:實驗1 111 2.2.15 內置類與同步:實驗2 113 2.2.16 鎖對象的改變 114 2.3 volatile關鍵字 118 2.3.1 關鍵字volatile與死循環 118 2.3.2 解決同步死循環 119 2.3.3 解決異步死循環 120 2.3.4 volatile非原子的特性 124 2.3.5 使用原子類進行i++操作 126 2.3.6 原子類也並不完全安全 127 2.3.7 synchronized代碼塊有volatile同步的功能 130 2.4 本章總結 132 第3章 綫程間通信 133 3.1 等待/通知機製 133 3.1.1 不使用等待/通知機製實現綫程間通信 133 3.1.2 什麼是等待/通知機製 135 3.1.3 等待/通知機製的實現 136 3.1.4 方法wait()鎖釋放與notify()鎖不釋放 143 3.1.5 當interrupt方法遇到wait方法 146 3.1.6 隻通知一個綫程 148 3.1.7 喚醒所有綫程 150 3.1.8 方法wait(long)的使用 150 3.1.9 通知過早 152 3.1.10 等待wait的條件發生變化 155 3.1.11 生産者/消費者模式實現 158 3.1.12 通過管道進行綫程間通信:字節流 171 3.1.13 通過管道進行綫程間通信:字符流 174 3.1.14 實戰:等待/通知之交叉備份 177 3.2 方法join的使用 179 3.2.1 學習方法join前的鋪墊 179 3.2.2 用join()方法來解決 180 3.2.3 方法join與異常 181 3.2.4 方法join(long)的使用 183 3.2.5 方法join(long)與sleep(long)的區彆 184 3.2.6 方法join()後麵的代碼提前運行:齣現意外 187 3.2.7 方法join()後麵的代碼提前運行:解釋意外 189 3.3 類ThreadLocal的使用 191 3.3.1 方法get()與null 191 3.3.2 驗證綫程變量的隔離性 192 3.3.3 解決get()返迴null問題 195 3.3.4 再次驗證綫程變量的隔離性 195 3.4 類InheritableThreadLocal的使用 197 3.4.1 值繼承 197 3.4.2 值繼承再修改 198 3.5 本章總結 199 第4章 Lock的使用 200 4.1 使用ReentrantLock類 200 4.1.1 使用ReentrantLock實現同步:測試1 200 4.1.2 使用ReentrantLock實現同步:測試2 202 4.1.3 使用Condition實現等待/通知錯誤用法與解決 204 4.1.4 正確使用Condition實現等待/通知 207 4.1.5 使用多個Condition實現通知部分綫程:錯誤用法 208 4.1.6 使用多個Condition實現通知部分綫程:正確用法 210 4.1.7 實現生産者/消費者模式:一對一交替打印 213 4.1.8 實現生産者/消費者模式:多對多交替打印 214 4.1.9 公平鎖與非公平鎖 216 4.1.10 方法getHoldCount()、getQueueLength()和getWaitQueueLength()的測試 219 4.1.11 方法hasQueuedThread()、hasQueuedThreads()和hasWaiters()的測試 222 4.1.12 方法isFair()、isHeldByCurrentThread()和isLocked()的測試 224 4.1.13 方法lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUnit unit)的測試 226 4.1.14 方法awaitUninterruptibly()的使用 230 4.1.15 方法awaitUntil()的使用 232 4.1.16 使用Condition實現順序執行 234 4.2 使用ReentrantReadWriteLock類 236 4.2.1 類ReentrantReadWriteLock的使用:讀讀共享 236 4.2.2 類ReentrantReadWriteLock的使用:寫寫互斥 237 4.2.3 類ReentrantReadWriteLock的使用:讀寫互斥 238 4.2.4 類ReentrantReadWriteLock的使用:寫讀互斥 239 4.3 本章總結 240 第5章 定時器Timer 241 5.1 定時器Timer的使用 241 5.1.1 方法schedule(TimerTask task, Date time)的測試 241 5.1.2 方法schedule(TimerTask task, Date firstTime, long period)的測試 247 5.1.3 方法schedule(TimerTask task, long delay)的測試 252 5.1.4 方法schedule(TimerTask task, long delay, long period)的測試 253 5.1.5 方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的測試 254 5.2 本章總結 261 第6章 單例模式與多綫程 262 6.1 立即加載/“餓漢模式” 262 6.2 延遲加載/“懶漢模式” 263 6.3 使用靜態內置類實現單例模式 271 6.4 序列化與反序列化的單例模式實現 272 6.5 使用static代碼塊實現單例模式 274 6.6 使用enum枚舉數據類型實現單例模式 275 6.7 完善使用enum枚舉實現單例模式 277 6.8 本章總結 278 第7章 拾遺增補 279 7.1 綫程的狀態 279 7.1.1 驗證NEW、RUNNABLE和TERMINATED 280 7.1.2 驗證TIMED_WAITING 281 7.1.3 驗證BLOCKED 282 7.1.4 驗證WAITING 284 7.2 綫程組 285 7.2.1 綫程對象關聯綫程組:1級關聯 285 7.2.2 綫程對象關聯綫程組:多級關聯 287 7.2.3 綫程組自動歸屬特性 288 7.2.4 獲取根綫程組 288 7.2.5 綫程組裏加綫程組 289 7.2.6 組內的綫程批量停止 290 7.2.7 遞歸與非遞歸取得組內對象 290 7.3 使綫程具有有序性 291 7.4 SimpleDateFormat非綫程安全 293 7.4.1 齣現異常 293 7.4.2 解決異常方法1 294 7.4.3 解決異常方法2 295 7.5 綫程中齣現異常的處理 297 7.6 綫程組內處理異常 299 7.7 綫程異常處理的傳遞 301 7.8 本章總結 306 |