您好,歡迎來到賦能網(wǎng)!

java多線程編程書哪本比較好?

賦能網(wǎng) 2023-05-09 70

編程技術(shù)的學習除了網(wǎng)上教材外,紙質(zhì)書籍也是有必要的,本篇文章就跟小編來了解一本優(yōu)秀的多線程編程書籍。

java多線程編程核心技術(shù)(第2版)》

這是一本及其優(yōu)秀的多線程編程書籍,本書涵蓋多線程編程核心庫、方法、原理,如何解決高并發(fā)環(huán)境下的業(yè)務(wù)瓶頸等問題處理方法,是了解多線程編程的最佳選擇之一。

內(nèi)容簡介

此書全文共7章。

第一章詳細的講解了Java多線程的基礎(chǔ),重點介紹線程類的核心API的使用。

第二章講解了對并發(fā)訪問的控制,即如何寫出線程安全的程序。

第三章介紹線程間通信,以提高CPU利用率和系統(tǒng)間的交互,同時增強對線程任務(wù)的把控與監(jiān)督。

第四章講解Lock對象,以更好實現(xiàn)并發(fā)訪問時的同步處理。

第五章講解移動開發(fā)中使用較多的定時器類中的多線程技術(shù),這是計劃/任務(wù)執(zhí)行里很重要的技術(shù)點。

第六章講解如何安全、正確地將單例模式與多線程技術(shù)相結(jié)合,避免實際應(yīng)用中可能會出現(xiàn)的麻煩。

第七章把前面有可能被遺漏的技術(shù)案例全部在本章補充了,盡量做到不出現(xiàn)技術(shù)空白點。

目錄

前言

第1章 Java多線程技能1

1.1 進程和多線程概述1

1.2 使用多線程5

1.2.1 繼承Thread類5

1.2.2 使用常見命令分析線程的信息8

1.2.3 線程隨機性的展現(xiàn)11

1.2.4 執(zhí)行start的順序不代表執(zhí)行run的順序12

1.2.5 實現(xiàn)Runnable接口13

1.2.6 使用Runnable接口實現(xiàn)多線程的優(yōu)點14

1.2.7 實現(xiàn)Runnable接口與繼承Thread類的內(nèi)部流程16

1.2.8 實例變量共享造成的非線程安全問題與解決方案17

1.2.9 Servlet技術(shù)造成的非線程安全問題與解決方案21

1.2.10 留意i--與System.out.println出現(xiàn)的非線程安全問題24

1.3 currentThread方法26

1.4 isAlive方法29

1.5 sleep(long millis)方法31

1.6 sleep(long millis, int nanos)方法33

1.7 StackTraceElement[] getStackTrace方法33

1.8 static void dumpStack方法35

1.9 static MapgetAllStackTraces方法36

1.10 getId方法38

1.11 停止線程38

1.11.1 停止不了的線程39

1.11.2 判斷線程是否為停止狀態(tài)41

1.11.3 能停止的線程—異常法43

1.11.4 在sleep狀態(tài)下停止線程47

1.11.5 用stop方法暴力停止線程49

1.11.6 stop方法與java.lang.ThreadDeath異常51

1.11.7 使用stop釋放鎖給數(shù)據(jù)造成不一致的結(jié)果52

1.11.8 使用“return;”語句停止線程的缺點與解決方案54

1.12 暫停線程57

1.12.1 suspend方法與resume方法的使用57

1.12.2 suspend方法與resume方法的缺點—獨占58

1.12.3 suspend方法與resume方法的缺點—數(shù)據(jù)不完整62

1.13 yield方法63

1.14 線程的優(yōu)先級64

1.14.1 線程優(yōu)先級的繼承特性65

1.14.2 優(yōu)先級的規(guī)律性66

1.14.3 優(yōu)先級的隨機性68

1.14.4 優(yōu)先級對線程運行速度的影響70

1.15 守護線程71

1.16 本章小結(jié)73

第2章 對象及變量的并發(fā)訪問74

2.1 synchronized同步方法74

2.1.1 方法內(nèi)的變量為線程安全74

2.1.2 實例變量非線程安全問題與解決方案77

2.1.3 同步synchronized在字節(jié)碼指令中的原理80

2.1.4 多個對象多個鎖81

2.1.5 將synchronized方法與對象作為鎖84

2.1.6 臟讀89

2.1.7 synchronized鎖重入91

2.1.8 鎖重入支持繼承的環(huán)境93

2.1.9 出現(xiàn)異常,鎖自動釋放94

2.1.10 重寫方法不使用synchronized96

2.1.11 public static boolean holdsLock(Object obj)方法的使用99

2.2 synchronized同步語句塊99

2.2.1 synchronized方法的弊端99

2.2.2 synchronized同步代碼塊的使用102

2.2.3 用同步代碼塊解決同步方法的弊端104

2.2.4 一半異步,一半同步105

2.2.5 synchronized代碼塊間的同步性108

2.2.6 println方法也是同步的110

2.2.7 驗證同步synchronized(this)代碼塊是鎖定當前對象的110

2.2.8 將任意對象作為鎖113

2.2.9 多個鎖就是異步執(zhí)行116

2.2.10 驗證方法被調(diào)用是隨機的118

2.2.11 不同步導(dǎo)致的邏輯錯誤及其解決方法121

2.2.12 細化驗證3個結(jié)論124

2.2.13 類Class的單例性129

2.2.14 靜態(tài)同步synchronized方法與synchronized(class)代碼塊130

2.2.15 同步syn static方法可以對類的所有對象實例起作用135

2.2.16 同步syn(class)代碼塊可以對類的所有對象實例起作用137

2.2.17 String常量池特性與同步相關(guān)的問題與解決方案138

2.2.18 同步synchronized方法無限等待問題與解決方案141

2.2.19 多線程的死鎖143

2.2.20 內(nèi)置類與靜態(tài)內(nèi)置類146

2.2.21 內(nèi)置類與同步:實驗1149

2.2.22 內(nèi)置類與同步:實驗2151

2.2.23 鎖對象改變導(dǎo)致異步執(zhí)行153

2.2.24 鎖對象不改變依然同步執(zhí)行156

2.2.25 同步寫法案例比較158

2.3 volatile關(guān)鍵字159

2.3.1 可見性的測試159

2.3.2 原子性的測試168

2.3.3 禁止代碼重排序的測試176

2.4 本章小結(jié)187

第3章 線程間通信188

3.1 wait/notify機制188

3.1.1 不使用wait/notify機制實現(xiàn)線程間通信188

3.1.2 wait/notify機制191

3.1.3 wait/notify機制的原理192

3.1.4 wait方法的基本使用192

3.1.5 完整實現(xiàn)wait/notify機制194

3.1.6 使用wait/notify機制實現(xiàn)list.size等于5時的線程銷毀195

3.1.7 對業(yè)務(wù)代碼進行封裝198

3.1.8 線程狀態(tài)的切換201

3.1.9 wait方法:立即釋放鎖202

3.1.10 sleep方法:不釋放鎖203

3.1.11 notify方法:不立即釋放鎖204

3.1.12 interrupt方法遇到wait方法206

3.1.13 notify方法:只通知一個線程208

3.1.14 notifyAll方法:通知所有線程211

3.1.15 wait(long)方法的基本使用212

3.1.16 wait(long)方法自動向下運行需要重新持有鎖214

3.1.17 通知過早問題與解決方法217

3.1.18 wait條件發(fā)生變化與使用while的必要性220

3.1.19 生產(chǎn)者/消費者模式的實現(xiàn)224

3.1.20 通過管道進行線程間通信—字節(jié)流250

3.1.21 通過管道進行線程間通信—字符流253

3.1.22 實現(xiàn)wait/notify的交叉?zhèn)浞?56

3.2 join方法的使用259

3.2.1 學習join方法前的鋪墊259

3.2.2 join方法和interrupt方法出現(xiàn)異常261

3.2.3 join(long)方法的使用263

3.2.4 join(long)方法與sleep(long)方法的區(qū)別264

3.2.5 join方法后面的代碼提前運行—出現(xiàn)意外 268

3.2.6 join方法后面的代碼提前運行—解釋意外270

3.2.7 join(long millis, int nanos)方法的使用273

3.3 類ThreadLocal的使用273

3.3.1 get方法與null274

3.3.2 類ThreadLocal存取數(shù)據(jù)流程分析275

3.3.3 驗證線程變量的隔離性277

3.3.4 解決get方法返回null的問題282

3.3.5 驗證重寫initialValue方法的隔離性283

3.4 類InheritableThreadLocal的使用284

3.4.1 類ThreadLocal不能實現(xiàn)值繼承285

3.4.2 使用InheritableThreadLocal體現(xiàn)值繼承特性286

3.4.3 值繼承特性在源代碼中的執(zhí)行流程288

3.4.4 父線程有最新的值,子線程仍是舊值291

3.4.5 子線程有最新的值,父線程仍是舊值293

3.4.6 子線程可以感應(yīng)對象屬性值的變化294

3.4.7 重寫childValue方法實現(xiàn)對繼承的值進行加工297

3.5 本章小結(jié)298

第4章 Lock對象的使用299

4.1 使用ReentrantLock類299

4.1.1 使用ReentrantLock實現(xiàn)同步299

4.1.2 驗證多代碼塊間的同步性301

4.1.3 await方法的錯誤用法與更正304

4.1.4 使用await和signal實現(xiàn)wait/notify機制307

4.1.5 await方法暫停線程運行的原理309

4.1.6 通知部分線程—錯誤用法312

4.1.7 通知部分線程—正確用法314

4.1.8 實現(xiàn)生產(chǎn)者/消費者模式一對一交替輸出317

4.1.9 實現(xiàn)生產(chǎn)者/消費者模式多對多交替輸出319

4.1.10 公平鎖與非公平鎖321

4.1.11 public int getHoldCount方法的使用324

4.1.12 public final int getQueue Length方法的使用325

4.1.13 public int getWaitQueue-Length (Condition condition)方法的使用327

4.1.14 public final boolean has-QueuedThread (Thread thread)方法的使用328

4.1.15 public final boolean has-QueuedThreads方法的使用329

4.1.16 public boolean hasWaiters (Con-dition condition)方法的使用331

4.1.17 public final boolean isFair方法的使用332

4.1.18 public boolean isHeldBy-CurrentThread方法的使用333

4.1.19 public boolean isLocked方法的使用334

4.1.20 public void lockInterruptibly方法的使用335

4.1.21 public boolean tryLock方法的使用336

4.1.22 public boolean tryLock (long timeout, TimeUnit unit)方法的使用338

4.1.23 public boolean await (long time, TimeUnit unit)方法的使用339

4.1.24 public long awaitNanos(long nanosTimeout)方法的使用341

4.1.25 public boolean awaitUntil(Date deadline)方法的使用342

4.1.26 public void awaitUninterru-ptibly方法的使用344

4.1.27 實現(xiàn)線程按順序執(zhí)行業(yè)務(wù)346

4.2 使用ReentrantReadWriteLock類349

4.2.1 ReentrantLock類的缺點349

4.2.2 ReentrantReadWriteLock類的使用—讀讀共享351

4.2.3 ReentrantReadWriteLock類的使用—寫寫互斥352

4.2.4 ReentrantReadWriteLock類的使用—讀寫互斥352

4.2.5 ReentrantReadWriteLock類的使用—寫讀互斥354

4.3 本章小結(jié)355

第5章 定時器Timer356

5.1 定時器Timer的使用356

5.1.1 schedule(TimerTask task, Datetime)方法的測試356

5.1.2 schedule(TimerTask task, Date firstTime, long period)方法的測試366

5.1.3 schedule(TimerTask task, long delay)方法的測試374

5.1.4 schedule(TimerTask task, long delay, long period)方法的測試374

5.1.5 scheduleAtFixedRate (TimerTask task, Date firstTime, long period)方法的測試375

5.2 本章小結(jié)384

第6章 單例模式與多線程385

6.1 立即加載/餓漢模式385

6.2 延遲加載/懶漢模式387

6.2.1 延遲加載/懶漢模式解析387

6.2.2 延遲加載/懶漢模式的缺點388

6.2.3 延遲加載/懶漢模式的解決方案390

6.3 使用靜態(tài)內(nèi)置類實現(xiàn)單例模式399

6.4 序列化與反序列化的單例模式實現(xiàn)400

6.5 使用static代碼塊實現(xiàn)單例模式402

6.6 使用enum枚舉數(shù)據(jù)類型實現(xiàn)單例模式404

6.7 完善使用enum枚舉數(shù)據(jù)類型實現(xiàn)單例模式405

6.8 本章小結(jié)407

第7章 拾遺增補408

7.1 線程的狀態(tài)408

7.1.1 驗證NEW、RUNNABLE和TERMINATED410

7.1.2 驗證TIMED_WAITING411

7.1.3 驗證BLOCKED412

7.1.4 驗證WAITING414

7.2 線程組415

7.2.1 線程對象關(guān)聯(lián)線程組:一級關(guān)聯(lián)416

7.2.2 線程對象關(guān)聯(lián)線程組:多級關(guān)聯(lián)417

7.2.3 線程組自動歸屬特性418

7.2.4 獲取根線程組419

7.2.5 線程組中加線程組420

7.2.6 組內(nèi)的線程批量停止421

7.2.7 遞歸取得與非遞歸取得組內(nèi)對象422

7.3 Thread.activeCount方法的使用423

7.4 Thread.enumerate(Thread tarray[])方法的使用423

7.5 再次實現(xiàn)線程執(zhí)行有序性424

7.6 SimpleDateFormat非線程安全426

7.6.1 出現(xiàn)異常426

7.6.2 解決異常的方法1428

7.6.3 解決異常的方法2430

7.7 線程中出現(xiàn)異常的處理431

7.7.1 線程出現(xiàn)異常的默認行為431

7.7.2 使用setUncaughtException-Handler方法進行異常處理432

7.7.3 使用setDefaultUncaughtExce-ptionHandler方法進行異常處理433

7.8 線程組內(nèi)處理異常434

7.9 線程異常處理的優(yōu)先性437

7.10 本章小結(jié)442

以上就是今天的全部內(nèi)容,關(guān)于多線程的內(nèi)容就是這樣了,想知道java學習多久可以工作嗎?Java工程師待遇如何呢?來關(guān)注本站了解具體吧。


本文鏈接:

本文章“java多線程編程書哪本比較好?”已幫助 70 人

免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權(quán)侵權(quán)的法律責任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構(gòu)》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579

如果本頁不是您要找的課程,您也可以百度查找一下: