-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
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書號: 41690
詢問書籍請說出此書號!

缺書
NT售價: 345

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

譯者序:

前言:

寫這本書

早在幾年前筆者就曾想過整理一份與Java多線程有關的稿件,因為市面上所有的Java書籍都是以一章或兩章的篇幅介紹多線程技術,并沒有完整地覆蓋該技術的知識點,但可惜,苦于當時的時間及精力有限,一直沒有達成所愿。

也許是注定的安排,我目前所在的單位是集技術與教育為一體的軟件類企業。我在工作中發現很多學員在學習完JavaSE/JavaEE之后想對更深入的技術進行探索,比如在對大數據、分布式、高并發類的專題進行攻克時,立即遇到針對java.lang包中Thread類的學習,但Thread類的學習并不像JDBC那樣簡單,學習多線程會遇到太多的問題、彎路以及我們所謂的“坑”,為了帶領學員在技術層面上進行更高的追求,我將多線程的技術點以教案的方式進行整理,在課堂上與同學們一起學習、交流,同學們反響也非常熱烈。此至,若干年前的心愿終于了卻,學員們也很期待這本書能出版發行,因為這樣他們就有了真正的紙質參考資料,其他愛好Java多線程的朋友們也在期盼本書的出版。本書能促進他們相互交流與學習,這就是我最大的心愿。

本書秉承大道至簡的主導思想,只介紹Java多線程開發中最值得關注的內容,希望能拋磚引玉,以個人的一些想法和見解,為讀者拓展出更深入、更全面的思路。

本書特色

在本書寫作的過程中,我盡量減少“?嗦”的文字語言,全部用案例來講解技術點的實現,使讀者看到代碼及運行結果后就可以知道此項目要解決的是什么問題,類似于網絡中的博客風格,可讓讀者用最短的時間學完相關知識點,明白這些知識點是如何應用的,以及在使用時要避免什么。本書就像“瑞士軍刀”一樣,精短小,但卻非常鋒利,可幫讀者快速學習知識并解決問題。

讀者對象

本書適合所有Java程序員閱讀,尤其適合以下讀者:

Java多線程開發者

Java并發開發者

系統架構師

大數據開發者

其他對多線程技術感興趣的人員

如何閱讀本書

在整理本書時,我一直本著實用、易懂的原則,最終整理出7章:

第1章講解了Java多線程的基礎,包括Thread類的核心API的使用。

第2章講解了在多線程中對并發訪問的控制,主要就是synchronized的使用,由于此關鍵字在使用上非常靈活,所以書中用了很多案例來介紹此關鍵字的使用,為讀者學習同步相關內容打好堅實的基礎。

第3章介紹線程并不是孤獨的,它們之間要通信,要交互。本章主要介紹wait()、notifyAll()和notify()方法的使用,使線程間能互相通信,合作完成任務。本章還介紹了ThreadLocal類的使用。學習完本章,讀者就能在Thread多線程中進行數據的傳遞了。

第4章講解了synchronized關鍵字,它使用起來比較麻煩,所以在Java 5中提供了Lock對象,以求能更好地實現并發訪問時的同步處理,包括讀寫鎖等相關技術點。

第5章講解了Timer定時器類,其內部實現就是使用的多線程技術。定時器的計劃任務執行是很重要的技術點,包括在Android開發時都會有深入的使用,所以會為讀者詳細講解。

第6章講解的單例模式雖然很簡單,但如果遇到多線程將會變得非常麻煩,如何在多線程中解決這么棘手的問題呢?本章將全面介紹解決方案。

第7章,在整理稿件的過程中肯定會出現一些技術知識點的空缺,前面被遺漏的技術案例將在本章進行補充,以幫助讀者形成完整的多線程的知識體系。編寫本章的目的就是盡量使本書不存在技術空白點。

勘誤和支持

由于我的水平有限,編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正,讓我與大家一起,在技術之路上互勉共進。我的郵箱是279377921@qq.com,期待能夠得到你們的真摯反饋。本書的源代碼可以在華章網站(www.hzbook.com)下載。

致謝

感謝所在單位領導的支持與厚愛,使我在技術道路上更有信心。

感謝機械工業出版社華章公司的高婧雅和楊福川,因為有了你們的鼓勵、幫助和引導,我才能順利完成本書。



高洪巖
內容簡介:

Java多線程無處不在,如服務器、數據庫、應用。多線程可以有效提升計算和處理效率,大大提升吞吐量和可伸縮性,深得廣大程序員和公司的青睞。很多人學習完JavaSE/JavaEE之后想往更深入的技術進行探索,比如對大數據、分布式、高并發類的專題進行攻克時,立即遇到針對java.lang包中線程類的學習,但線程類的學習并不像JDBC一樣簡單,學習曲線陡峭,多彎路與“坑”。要學習這些熱點技術,Java多線程技術避無可避。而本書將引領讀者拿下該“技術高地”。
本書有以下特點:
不留遺漏——全面覆蓋Java語言多線程知識點;
直擊要害——實戰化案例精準定位技術細節;
學以至用——精要式演示確保開發/學習不脫節;
潛移默化——研磨式知識講解參透技術要點;
提升效率——垂直式技術精解不繞彎路;
循序提升——漸進式知識點統排確保連貫。

資深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
序: