注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)數(shù)據(jù)庫數(shù)據(jù)庫設(shè)計/管理一本書講透Java線程:原理與實踐

一本書講透Java線程:原理與實踐

一本書講透Java線程:原理與實踐

定 價:¥109.00

作 者: 儲誠益
出版社: 機械工業(yè)出版社
叢編項:
標(biāo) 簽: 暫缺

ISBN: 9787111737261 出版時間: 2023-11-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  本書由科大訊飛高級系統(tǒng)架構(gòu)師撰寫,結(jié)合大量源碼與圖示,通俗易懂;自頂向下解析JDK、JVM、Linux中的Java線程通信機制、同步機制、鎖機制、原子計數(shù)器、線程安全容器、線程池的實現(xiàn)原理與應(yīng)用技巧。全書共12章,分為三篇?;A(chǔ)篇(第1~5章),從Linux的線程基礎(chǔ)講起,重點從JDK、JVM、Linux多個維度講解Java線程的設(shè)計、通信與同步機制,如內(nèi)存一致性、內(nèi)存屏障、多線程間數(shù)據(jù)通信、并發(fā)控制等核心知識,從而在實際開發(fā)中提高程序的性能和穩(wěn)定性。進階篇(第6~9章),從CPU的架構(gòu)講起,重點講解鎖算法(MCS、CLH、AQS)、Java鎖機制、原子計數(shù)器、線程并發(fā)容器、線程池的設(shè)計原理與實現(xiàn),以期讓讀者掌握Java線程的進階知識,不僅能開發(fā)出高性能的程序,而且遇到問題可以舉一反三,找到最佳方案。應(yīng)用篇(第10~11章),詳細講解Java線程的常見模型與使用技巧。以電商真實場景為例,從面臨的挑戰(zhàn)、基于Java多線程的實現(xiàn)方案與優(yōu)化等角度層層遞進,讓讀者感受真實的Java線程“威力”。 最后,總結(jié)多線程編程的常見問題與使用技巧。

作者簡介

  儲誠益科大訊飛高級系統(tǒng)架構(gòu)師,致力于研究下一代工業(yè)互聯(lián)網(wǎng)系統(tǒng)架構(gòu)、人工智能、中小制造企業(yè)數(shù)字化轉(zhuǎn)型。擁有十余年的IT領(lǐng)域工作經(jīng)驗,曾就職于多家知名IT企業(yè)并負責(zé)技術(shù)架構(gòu)設(shè)計和管理工作,積累了豐富的分布式架構(gòu)、大數(shù)據(jù)、云計算以及大規(guī)模IT系統(tǒng)等的建設(shè)、實施、咨詢、管理經(jīng)驗。

圖書目錄

目  錄  Contents
前言
基礎(chǔ)篇
第1章 Linux線程基礎(chǔ)2
1.1 Linux進程2
1.1.1 深入理解進程2
1.1.2 進程描述符3
1.1.3 進程創(chuàng)建6
1.1.4 上下文切換7
1.2 Linux進程間通信7
1.2.1 信號 8
1.2.2 管道9
1.2.3 共享內(nèi)存 9
1.2.4 FIFO隊列 9
1.2.5 消息隊列 10
1.2.6 Socket10
1.3 CPU任務(wù)調(diào)度10
1.3.1 實時進程與普通進程11
1.3.2 實時調(diào)度策略11
1.3.3 普通調(diào)度策略11
1.3.4 CFS調(diào)度算法11
1.3.5 整體任務(wù)調(diào)度12
1.4 Linux線程13
1.4.1 Pthread簡介14
1.4.2 線程創(chuàng)建16
1.4.3 線程終止18
1.5 線程同步:互斥量20
1.5.1 創(chuàng)建互斥量21
1.5.2 互斥量解鎖22
1.5.3 mutex示例22
1.6 線程同步:條件變量23
1.6.1 創(chuàng)建條件變量23
1.6.2 條件變量等待24
1.6.3 條件變量通知24
1.6.4 條件變量使用示例24
1.7 線程同步:信號量25
1.7.1 初始化未命名信號量26
1.7.2 等待一個信號量26
1.7.3 發(fā)布一個信號量26
1.8 小結(jié)27
第2章 JVM基礎(chǔ)知識28
2.1 Java、JDK、JRE與JVM28
2.2 Java跨平臺原理29
2.3 JVM系統(tǒng)架構(gòu)30
2.3.1 類加載子系統(tǒng)30
2.3.2 運行時數(shù)據(jù)區(qū)33
2.3.3 執(zhí)行引擎35
2.4 JVM與操作系統(tǒng)的線程模型36
2.4.1 操作系統(tǒng)的線程模型36
2.4.2 JVM的線程模型38
2.5 JNI機制39
2.5.1 JNI開發(fā)流程40
2.5.2 JNI數(shù)據(jù)類型轉(zhuǎn)換41
2.5.3 實現(xiàn)案例43
2.6 小結(jié)43
第3章 JVM線程44
3.1 為什么需要多線程44
3.1.1 CPU訪問各組件周期45
3.1.2 多線程的出現(xiàn)45
3.2 多線程帶來的問題46
3.2.1 CPU緩存導(dǎo)致的可見性問題46
3.2.2 線程上下文切換帶來的原子性
   問題47
3.2.3 優(yōu)化帶來的亂序問題48
3.3 Java內(nèi)存模型與線程規(guī)范50
3.3.1 變量共享51
3.3.2 變量共享的內(nèi)存可見性51
3.3.3 Happens-Before規(guī)則52
3.4 內(nèi)存一致性協(xié)議56
3.4.1 CPU緩存讀取策略57
3.4.2 CPU緩存寫入策略58
3.4.3 MESI協(xié)議59
3.5 內(nèi)存屏障61
3.5.1 內(nèi)存讀寫屏障64
3.5.2 內(nèi)存屏障的實現(xiàn)64
3.5.3 JVM內(nèi)存屏障指令實現(xiàn)65
3.6 JVM的線程66
3.7 Java線程創(chuàng)建過程68
3.7.1 線程創(chuàng)建69
3.7.2 線程執(zhí)行73
3.8 Java線程生命周期75
3.8.1 Java線程生命周期模型75
3.8.2 查看線程的狀態(tài)78
3.9 小結(jié)79
第4章 JVM線程通信原理80
4.1 ParkEvent原理80
4.1.1 Allocate方法81
4.1.2 Rlease方法81
4.1.3 park方法82
4.1.4 unpark方法83
4.2 Parker實現(xiàn)原理84
4.2.1 park方法84
4.2.2 unpark方法86
4.3 sleep方法實現(xiàn)原理86
4.3.1 JVM_Sleep函數(shù)86
4.3.2 sleep函數(shù)87
4.4 ObjectMonitor實現(xiàn)原理88
4.4.1 數(shù)據(jù)結(jié)構(gòu)89
4.4.2 ObjectMonitor的構(gòu)造函數(shù)89
4.4.3 ObjectWaiter源代碼90
4.4.4 TryLock方法91
4.4.5 EnterI方法91
4.4.6 ReenterI方法93
4.4.7 enter方法94
4.4.8 exit方法?95
4.4.9 ExitEpilog方法97
4.5 wait與notify方法實現(xiàn)原理97
4.5.1 設(shè)計原理98
4.5.2 wait方法實現(xiàn)原理100
4.5.3 notify方法實現(xiàn)原理102
4.5.4 notifyAll方法實現(xiàn)原理103
4.6 yield方法實現(xiàn)原理103
4.7 join方法實現(xiàn)原理104
4.7.1 JVM_IsThreadAlive105
4.7.2 ensure_join106
4.8 stop方法實現(xiàn)原理107
4.8.1 JVM_StopThread107
4.8.2 HAS_PENDING_EXCEPTION108
4.9 interrupt方法實現(xiàn)原理109
4.10 小結(jié)110
第5章 JVM線程同步機制111
5.1 Mark Word 111
5.1.1 Mark Word詳解 112
5.1.2 hashCode驗證113
5.1.3 輕量級鎖的狀態(tài)信息114
5.1.4 重量級鎖的狀態(tài)信息114
5.2  synchronized設(shè)計原理115
5.2.1 synchronized的使用116
5.2.2 synchronized的具體設(shè)計118
5.3 synchronized源碼分析120
5.3.1 ACC_SYNCHRONIZED解析
     過程120
5.3.2 monitorenter指令解析過程122
5.3.3 monitorexit指令解析過程123
5.3.4 鎖獲取實現(xiàn)過程124
5.3.5 鎖釋放實現(xiàn)過程126
5.4 volatile實現(xiàn)原理128
5.4.1 實現(xiàn)原理概述129
5.4.2 getfield指令實現(xiàn)過程130
5.4.3 putfield指令實現(xiàn)過程131
5.5 volatile偽共享132
5.6 CAS硬件同步原語134
5.6.1 CAS硬件原語134
5.6.2 JVM CAS實現(xiàn)135
5.6.3 ABA問題135
5.7 Unsafe功能介紹136
5.7.1 操作內(nèi)存136
5.7.2 獲取字段內(nèi)存偏移量137
5.7.3 普通字段的讀取與賦值138
5.7.4 volatile字段的讀取與賦值138
5.7.5 CAS操作能力139
5.7.6 線程阻塞與喚醒139
5.7.7 內(nèi)存屏障139
5.8 Unsafe實現(xiàn)原理140
5.8.1 volatile字段讀取140
5.8.2 volatile字段寫入141
5.8.3 CAS操作能力141
5.8.4 線程阻塞與喚醒142
5.9 LockSupport實現(xiàn)原理143
5.9.1 Unsafe初始化143
5.9.2 無阻塞對象方法144
5.9.3 有阻塞對象方法144
5.9.4 線程喚醒146
5.10 小結(jié)146
進階篇
第6章 Java鎖實現(xiàn)原理148
6.1 CPU架構(gòu)148
6.1.1 SMP148
6.1.2 NUMA149
6.1.3 SMP與NUMA比較150
6.2 自旋鎖的誕生150
6.2.1 SPIN ON TEST-AND-SET150
6.2.2 TEST-AND

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號