会员   密码 您忘记密码了吗?
1,571,837 本书已上架      购物流程 | 常见问题 | 联系我们 | 关于我们 | 用户协议

有店 App


当前分类

商品分类

浏览历史

当前位置: 首页 > 简体书 > Java多線程編程核心技術(第3版)
Java多線程編程核心技術(第3版)
上一张
下一张
prev next

Java多線程編程核心技術(第3版)

作者: 高洪岩
出版社: 機械工業出版社
出版日期: 2022-01-01
商品库存: 点击查询库存
以上库存为海外库存属流动性。
可选择“空运”或“海运”配送,空运费每件商品是RM14。
配送时间:空运约8~12个工作天,海运约30个工作天。
(以上预计配送时间不包括出版社库存不足需调货及尚未出版的新品)
定价:   NT774.00
市场价格: RM139.15
本店售价: RM123.84
促销价: RM122.45
剩余时间: 请稍等, 正在载入中...
购买数量:
collect Add to cart Add booking
详细介绍 商品属性 商品标记
內容簡介

本書作為講解Java多執行緒技術的教程,主要介紹 核心並常用的技術點,比如解決執行緒Thread的停止,執行緒物件Thread的暫停,執行緒的優先順序,synchronized關鍵字的使用,以及使用它解決非執行緒安全的問題。使用volatile關鍵字解決變數可見性問題,使用wait()及notify()方法實現等待通知模式,還有使用ThreadLocal類進行隔離變數,Lock鎖物件的使用,包含Condition類實現生產者-消費者模式,深入講解了Condition類在使用上的細節。
 
還包括對Lock鎖物件中的常見API進行細化講解,ReentrantReadWriteLock讀寫鎖的使用等,Timer計時器類的使用。多執行緒實現單例模式時完整的解決步驟,以及多執行緒異常的處理等常見Java多執行緒解決方案。併發集合框架的使用,以及執行緒池技術點的使用。


作者介紹


目錄

第1章Java多執行緒技能 1
1.1進程和執行緒的定義及多執行緒的優點 1
1.2使用多執行緒 5
1.2.1繼承Thread類 6
1.2.2使用常見的3個命令分析執行緒的資訊 8
1.2.3執行緒隨機性的展現 10
1.2.4執行start()的順序不代表執行run()的順序 12
1.2.5實現Runnable介面 14
1.2.6使用Runnable介面實現多執行緒的優點 15
1.2.7public Thread(Runnable target)中的target參數 16
1.2.8執行個體變數共用導致的“非執行緒安全”問題與相應的解決方案 18
1.2.9Servlet技術也會引起“非執行緒安全”問題 22
1.2.10留意i--與System.out.println()出現的“非執行緒安全”問題 25
1.2.11方法run()被JVM所調用 27
1.3方法currentThread() 27
1.4方法isAlive() 30
1.5方法sleep(long millis) 33
1.6方法sleep(long millis, int nanos) 34
1.7方法StackTraceElement[] getStack-Trace() 35
1.8方法static void dumpStack() 36
1.9方法Map getAllStackTraces() 37
1.10方法getId() 39
1.11停止執行緒 40
1.11.1停止不了的執行緒 41
1.11.2判斷執行緒是不是停止狀態 42
1.11.3清除中斷狀態的使用場景 44
1.11.4能停止的執行緒—異常法 48
1.11.5在sleep狀態下停止 51
1.11.6使用stop()暴力停止執行緒 53
1.11.7方法stop()與java.lang.Thread-Death異常 55
1.11.8使用stop()釋放鎖導致資料結果不一致 57
1.11.9使用return;語句停止執行緒的缺點及相應的解決方案 59
1.12暫停執行緒 61
1.12.1方法suspend()與resume()的使用 62
1.12.2方法suspend()與resume()的缺點—獨佔 63
1.12.3方法suspend()與resume()的缺點—資料不完整 66
1.12.4使用LockSupport類實現執行緒暫停與恢復 67
1.13方法yield() 69
1.14執行緒的優先順序 70
1.14.1執行緒優先順序的繼承特性 71
1.14.2執行緒優先順序的規律性 72
1.14.3執行緒優先順序的隨機性 75
1.14.4看誰跑得快 76
1.15守護執行緒 78
1.16併發與並行 79
1.17同步與非同步 80
1.18多核CPU不一定比單核CPU運行快 81
1.19本章小結 82
 
第2章物件及變數的併發訪問 83
2.1synchronized同步方法 83
2.1.1方法內的變數是執行緒安全的 83
2.1.2執行個體變數“非執行緒安全”問題及解決方案 85
2.1.3同步synchronized在位元組碼指令中的原理 88
2.1.4多個物件多個鎖 90
2.1.5synchronized方法將物件作為鎖 92
2.1.6髒讀與解決 97
2.1.7synchronized鎖重入 99
2.1.8繼承環境下的鎖重入 100
2.1.9出現異常,鎖自動釋放 102
2.1.10非同步方法?:不使用synchronized重寫方法 104
2.2synchronized同步語句塊 106
2.2.1synchronized方法的弊端 106
2.2.2synchronized同步代碼塊的使用 109
2.2.3用同步代碼塊解決同步方法的弊端 111
2.2.4一半非同步,一半同步 112
2.2.5synchronized代碼塊間的同步性 114
2.2.6方法println()也是同步的 116
2.2.7驗證synchronized(this)同步代碼塊是鎖定當前物件的 117
2.2.8將任意對象作為鎖 119
2.2.9多個鎖就是非同步執行 121
2.2.10驗證方法被調用是隨機的 124
2.2.11不同步導致的邏輯錯誤與解決方案 125
2.2.12細化驗證3個結論 129
2.2.13類對象的單例性 134
2.2.14靜態同步?:synchronized方法與synchronized(class)代碼塊 135
2.2.15同步synchronized方法可以對類的所有物件實例起作用 139
2.2.16同步synchronized(class)代碼塊可以對類的所有物件實例起作用 141
2.2.17String常量池特性與同步問題 143
2.2.18synchronized方法無限等待問題與解決方案 146
2.2.19多執行緒的鎖死 148
2.2.20內置類與靜態內置類 150
2.2.21內置類與同步?:實驗1 153
2.2.22內置類與同步?:實驗2 155
2.2.23鎖物件改變導致非同步執行 156
2.2.24鎖物件不改變依然是同步執行 159
2.2.25同步寫法案例比較 161
2.2.26方法holdsLock(Object obj)的使用 161
2.2.27臨界區 162
2.3volatile關鍵字 162
2.3.1可見性的測試 163
2.3.2原子性與非原子性的測試 171
2.3.3禁止代碼重排序的測試 179
2.4本章小結 190
 
第3章執行緒間通信 191
3.1wait/ notify機制 191
3.1.1不使用wait/notify機制進行通信的缺點 191
3.1.2什麼是wait/notify機制 194
3.1.3wait/notify機制的原理 194
3.1.4方法wait()的基本用法 195
3.1.5使用代碼完整實現wait /notify機制 196
3.1.6使用wait/notify機制實現執行緒銷毀 198
3.1.7對業務代碼進行封裝 200
3.1.8執行緒狀態的切換 203
3.1.9方法wait()導致鎖立即釋放 204
3.1.10方法sleep()不釋放鎖 206
3.1.11方法notify()不立即釋放鎖 206
3.1.12方法interrupt()遇到方法wait() 208
3.1.13方法notify()只通知一個執行緒 210
3.1.14方法notifyAll()通知所有執行緒 212
3.1.15方法wait(long)的基本用法 213
3.1.16方法wait(long)自動向下運行的條件 215
3.1.17通知過早與相應的解決方案 218
3.1.18等待條件發生變化 220
3.1.19生產者/消費者模式實現 224
3.1.20在管道中傳遞位元組流 239
3.1.21在管道中傳遞字元流 241
3.1.22利用wait/notify機制實現交叉備份 244
3.1.23方法sleep()和wait()的區別 247
3.2方法join()的使用 247
3.2.1學習方法join()前的鋪墊 247
3.2.2用方法join()解決問題 248
3.2.3方法join()和interrupt()出現異常 250
3.2.4方法join(long)的使用 252
3.2.5方法join(long)與sleep(long)的區別 254
3.2.6方法join()後的代碼提前運行 257
3.2.7方法join(long millis, int nanos)的使用 261
3.3類ThreadLocal的使用 262
3.3.1方法get()與null 262
3.3.2類ThreadLocal存取資料流程程分析 263
3.3.3驗證執行緒變數的隔離性 266
3.3.4解決get()返回null的問題 270
3.3.5驗證重寫initialValue()方法的隔離性 271
3.3.6使用remove()方法的必要性 272
3.4類InheritableThreadLocal的使用 276
3.4.1類ThreadLocal不能實現值繼承 277
3.4.2使用InheritableThreadLocal體現值繼承特性 278
3.4.3值繼承特性在原始程式碼中的執行流程 280
3.4.4父執行緒有 的值,子執行緒還是舊值?:不可變類型 285
3.4.5子執行緒有 的值,父執行緒還是舊值?:不可變類型 286
3.4.6子執行緒可以感應物件屬性值的變化?:可變類型 288
3.4.7重寫childValue方法實現對繼承值的加工 291
3.5本章小結 291
 
第4章鎖的使用 292
4.1使用ReentrantLock類 292
4.1.1使用ReentrantLock實現同步 292
4.1.2驗證多代碼塊間的同步性 294
4.1.3方法await()的錯誤用法與相應的解決方案 297
4.1.4使用方法await()和方法signal()實現wait/notify 300
4.1.5方法await()暫停的原理 302
4.1.6通知部分執行緒?:錯誤用法 306
4.1.7通知部分執行緒?:正確用法 308
4.1.8實現生產者/消費者模式一對一交替列印 311
4.1.9實現生產者/消費者模式多對多交替列印 313
4.1.10公平鎖與非公平鎖 315
4.1.11方法getHoldCount()的使用 318
4.1.12方法getQueueLength()的使用 319
4.1.13方法getWaitQueueLength(Condition condition)的使用 321
4.1.14方法hasQueuedThread(Thread thread)的使用 322
4.1.15方法hasQueuedThreads()的使用 323
4.1.16方法hasWaiters(Condition condition)的使用 324
4.1.17方法isFair()的使用 326
4.1.18方法isHeldByCurrentThread()的使用 326
4.1.19方法isLocked()的使用 327
4.1.20方法lockInterruptibly()的使用 328
4.1.21方法tryLock()的使用 330
4.1.22方法tryLock(long timeout, Time-Unit unit)的使用 331
4.1.23方法await(long time, TimeUnit unit)的使用 333
4.1.24方法awaitNanos(long nanos-Timeout)的使用 334
4.1.25方法awaitUntil(Date deadline)的使用 335
4.1.26方法awaitUninterruptibly()的使用 337
4.1.27實現執行緒按循序執行業務 339
4.2使用ReentrantReadWriteLock類 342
4.2.1類ReentrantLock的缺點 342
4.2.2讀讀共用 344
4.2.3寫寫互斥 344
4.2.4讀寫互斥 345
4.2.5寫讀互斥 346
4.3本章小結 347
 
第5章計時器 348
5.1計時器的使用 348
5.1.1方法schedule(TimerTask task, Date time)的測試 349
5.1.2方法schedule(TimerTask task, Date f?irstTime, long period)的測試 357
5.1.3方法schedule(TimerTask task, long delay)的測試 365
5.1.4方法schedule(TimerTask task, long delay, long period)的測試 365
5.1.5方法scheduleAtFixedRate(TimerTask task, Date f?irst-Time, long period)的測試 366
5.2本章小結 374
 
第6章單例模式與多執行緒 375
6.1單例模式與多執行緒 375
6.1.1立即載入/餓漢模式 375
6.1.2延遲載入/懶漢模式 377
6.1.3使用靜態內置類實現單例模式 388
6.1.4序列化與反序列化的單例模式實現 389
6.1.5使用static代碼塊實現單例模式 392
6.1.6使用enum列舉資料型別實現單例模式 393
6.1.7完善使用enum枚舉實現單例模式 394
6.2本章小結 396
 
第7章拾遺增補 397
7.1執行緒的狀態 397
7.1.1驗證NEW、RUNNABLE和TERMINATED 399
7.1.2驗證TIMED_WAITING 400
7.1.3驗證BLOCKED 401
7.1.4驗證WAITING 403
7.2執行緒組 404
7.2.1執行緒對象關聯執行緒組?:一級關聯 404
7.2.2執行緒對象關聯執行緒組?:多級關聯 406
7.2.3執行緒組自動歸屬特性 407
7.2.4獲取根執行緒組 408
7.2.5執行緒組內加執行緒組 409
7.2.6組內的執行緒批量停止 409
7.2.7遞迴取得與非遞迴取得組內對象 410
7.3Thread.activeCount()方法的使用 412
7.4Thread.enumerate(Thread tarray[])方法的使用 412
7.5再次驗證執行緒執行有序性 412
7.6類SimpleDateFormat非執行緒安全 414
7.6.1出現異常 415
7.6.2解決方法1 417
7.6.3解決方法2 418
7.7執行緒中出現異常的處理 420
7.7.1執行緒出現異常的默認行為 420
7.7.2使用setUncaughtException-Handler()方法進行異常處理 421
7.7.3使用setDefaultUncaught-ExceptionHandler()方法進行異常處理 422
7.8執行緒組內處理異常 423
7.9執行緒異常處理的優先性 426
7.10本章小結 431
 
第8章併發集合框架 432
8.1集合框架結構 432
8.1.1介面Iterable 432
8.1.2介面Collection 432
8.1.3介面List 433
8.1.4介面Set 434
8.1.5介面Queue 435
8.1.6介面Deque 435
8.2非阻塞佇列 435
8.2.1類ConcurrentHashMap的使用 436
8.2.2類ConcurrentSkipListMap的使用 442
8.2.3類ConcurrentSkipListSet的使用 444
8.2.4類ConcurrentLinkedQueue的使用 447
8.2.5類ConcurrentLinkedDeque的使用 451
8.2.6類CopyOnWriteArrayList的使用 453
8.2.7類CopyOnWriteArraySet的使用 454
8.3阻塞佇列 456
8.3.1類ArrayBlockingQueue與公平/非公平鎖的使用 456
8.3.2類PriorityBlockingQueue的使用 461
8.3.3類LinkedBlockingQueue的使用 463
8.3.4類LinkedBlockingDeque的使用 463
8.3.5類SynchronousQueue的使用 463
8.3.6類DelayQueue的使用 466
8.3.7類LinkedTransferQueue的使用 467
8.4本章小結 476
 
第9章執行緒池類ThreadPoolExecutor的使用 477
9.1Executor介面介紹 477
9.2使用Executors工廠類創建執行緒池 481
9.2.1使用newCachedThreadPool()方法創建無界執行緒池 481
9.2.2驗證newCachedThreadPool()方法創建執行緒池和執行緒複用特性 483
9.2.3使用newCachedThreadPool (ThreadFactory)方法定制執行緒工廠 486
9.2.4使用newCachedThread-Pool()方法創建無界執行緒池的缺點 487
9.2.5使用newFixedThreadPool(int)
方法創建有界執行緒池 488
9.2.6使用newSingleThread-Executor()方法創建單一執行緒池 490
9.3ThreadPoolExecutor類的使用 491
9.3.1佇列LinkedBlocking-Queue、ArrayBlocking-Queue和Synchronous-Queue的基本使用 491
9.3.2構造方法參數詳解 495
9.3.3方法shutdown()和shutdownNow() 521
9.3.4方法List shutdown-Now()返回值的作用 525
9.3.5方法shutdown()和shutdown-Now()與中斷 527
9.3.6方法isShutdown() 529
9.3.7方法isTerminating()和isTerminated() 530
9.3.8方法awaitTermination(long timeout,TimeUnit unit) 531
9.3.9工廠ThreadFactory+Thread+UncaughtExceptionHandler處理異常 533
9.3.10方法set/getRejected-ExecutionHandler() 537
9.3.11方法allowsCoreThreadTime-Out和allowCoreThreadTime-Out(bool) 539
9.3.12方法prestartCoreThread()和prestartAllCoreThreads() 541
9.3.13方法getCompletedTask-Count() 542
9.3.14執行緒池ThreadPoolExecutor的拒 策略 543
9.3.15方法afterExecute()和beforeExecute() 549
9.3.16方法remove(Runnable)的使用 551
9.3.17多個get方法的測試 555
9.4本章小結 558