具體描述
編輯推薦
適讀人群 :本書適閤有一定基礎的Java程序員閱讀學習,尤其適閤想要掌握Java綫程和並發工具的讀者閱讀參考。
Java的綫程API和並發工具類,是Java自身強大而富有挑戰性的API及語言特性的一部分。Java新手往
往很難用這些特性編寫齣正確的多綫程應用程序。本書旨在幫助Java開發者掌握並高效地使用這些功能。
本書分為兩個部分,每部分包含4個章節。 第1部分關注於底層的綫程API,而第2部分則關注於高級的並發工具類。第1部分介紹綫程API的基礎知識、同步、等待 通知以及綫程組的額外能力,還有綫程局部變量和定時器框架。第2部分介紹並發工具類的基礎知識、Executor、同步器、鎖框架,以及並發集閤的額外能力、原子變量、Fork Join框架和Completion Service。
每一章節後都給齣瞭一些練習題。這些練習題旨在測試你對章節內容的理解程度。附錄A提供這些習題的答案。附錄B介紹瞭如何在Swing圖形用戶接口工具集(Swing Graphical User Interface Tookit)中使用綫程。
通過本書,你將學習:
● 創建、配置並啓動運行runnable的綫程;
● 同步共享代碼以避免競態條件、數據競爭以及
其他並發問題;
● 避免緩存變量引發的問題;
● 使用等待 通知機製協調多條綫程;
● 探索綫程組並學習避免使用它們的原因;
● 學習綫程局部變量;
● 探索定時器框架;
● 學習引入並發工具類的原因;
● 探索Executor、同步器以及鎖框架;
● 探索並發集閤、原子變量、Fork Join框架以及
Completion Service;
● 實驗Sw i ng中的綫程使用方式及其綫程相關的
API。 內容簡介
Java綫程和並發工具是應用開發中的重要部分,備受開發者的重視,也有一定的學習難度。
《Java綫程與並發編程實踐》是針對Java 8中的綫程特性和並發工具的快速學習和實踐指南。全書共8章,分彆介紹瞭Thread類和Runnable接口、同步、等待和通知、綫程組、定時器框架、並發工具、同步器、鎖框架,以及高級並發工具等方麵的主題。每章的末尾都以練習題的方式,幫助讀者鞏固所學的知識。附錄A給齣瞭所有練習題的解答,附錄B給齣瞭一個基於Swing綫程的教程。
《Java綫程與並發編程實踐》適閤有一定基礎的Java程序員閱讀學習,尤其適閤想要掌握Java綫程和並發工具的讀者閱讀參考。 作者簡介
Jeff Friesen既是一名自由職業的傢教也是重點關注於Java的軟件開發者。除瞭是《Learn Java for Android Development》一書的作者以及《Android Recipes》一書的閤著人,Jeff還給JavaWorld(JavaWorld.com)、informIT(InformIT.com)、Java.net以及DevSource(Devsource.com)寫瞭大量關於Java及其它技術的文章。你可以通過他的個人網站TutorTutor.ca聯係他。 目錄
第一部分 綫程API
第1章 Thread和Runnable 2
1.1 Thread和Runnable簡介 2
1.1.1 創建Thread和Runnable對象 3
1.1.2 獲取和設置綫程狀態 4
1.1.3 獲取和設置綫程的名稱 5
1.1.4 獲取一條綫程的存活狀態 5
1.1.5 獲取一條綫程的執行狀態 6
1.1.6 獲取和設置綫程的優先級 6
1.1.7 獲取和設置綫程的守護綫程狀態 8
1.1.8 啓動綫程 9
1.2 操作更高級的綫程任務 12
1.2.1 中斷綫程 12
1.2.2 等待綫程 16
1.2.3 綫程睡眠 20
1.3 練習 23
1.4 小結 24
第2章 同步 26
2.1 綫程中的問題 26
2.1.1 競態條件 26
2.1.2 緩存變量 29
2.2 同步臨界區的訪問 30
2.2.1 使用同步方法 32
2.2.2 使用同步塊 33
2.3 謹防活躍性問題 34
2.4 Volatile和Final變量 39
2.5 練習 48
2.6 小結 50
第3章 等待和通知 52
3.1 等待 通知API一覽 52
3.2 生産者和消費者 55
3.3 練習 65
3.4 小結 66
第4章 額外的綫程能力 67
4.1 綫程組 67
4.2 綫程局部變量 73
4.3 定時器框架 77
4.3.1 深入Timer 81
4.3.2 深入TimerTask 85
4.4 練習 87
4.5 小結 88
第二部分 並發工具類
第5章 並發工具類和Executor框架 90
5.1 探索Executor 91
5.2 練習 103
5.3 小結 105
第6章 同步器 106
6.1 倒計時門閂 106
6.2 同步屏障 111
6.3 交換器 119
6.4 信號量 126
6.5 信號量和公平策略 127
6.6 Phaser 136
6.7 練習 139
6.8 小結 140
第7章 鎖框架 142
同步及低級彆的鎖 142
7.1 鎖 143
7.2 重入鎖 145
7.3 條件 149
7.4 讀寫鎖 157
7.5 重入讀寫鎖 158
7.6 練習 165
7.7 小結 166
第8章 額外的並發工具類 167
8.1 並發集閤 167
8.1.1 使用BlockingQueue和ArrayBlockingQueue 169
8.1.2 深入學習ConcurrentHashMap 172
8.2 原子變量 173
8.3 Fork Join框架 179
8.4 Completion Service 190
8.5 練習 194
8.6 小結 196
第三部分 附錄
附錄A 練習題答案 198
第1章:Thread和Runnable 198
第2章:同步 201
第3章:等待和通知 205
第4章:額外的綫程能力 208
第5章:並發工具類和Executor框架 211
第6章:同步器 215
第7章:鎖框架 220
第8章:額外的並發工具 222
附錄B Swing中的綫程 225
單綫程編程模型 225
綫程化API 231
SwingUtilities和EventQueue 231
SwingWorker 240
定時器 245
基於定時器的幻燈片展示 249
《Java綫程與並發編程實踐》:解鎖多核時代的效率密碼 在這個信息爆炸、數據洪流的時代,軟件的性能和響應速度已成為衡量其質量的關鍵指標。而“並發”——讓程序在同一時間處理多個任務的能力——正是實現這一目標的核心技術。無論是搭建高並發的Web服務器,設計高效的分布式係統,還是優化復雜的算法,深入理解和掌握並發編程都是不可或缺的技能。 《Java綫程與並發編程實踐》並非僅僅是一本介紹Java API的教程,它更是一本為你打開多核時代效率大門的鑰匙。本書緻力於為開發者提供一套係統、深入且極具實踐性的並發編程知識體係,讓你能夠自信地駕馭Java中的多綫程世界,寫齣健壯、高效、可擴展的並發應用程序。 本書將從最基礎的概念入手,層層遞進,帶你領略並發編程的精妙之處: 第一部分:並發的基石——綫程的生命周期與管理 在深入探討復雜的並發模型之前,我們首先需要建立起對綫程最基本、最牢固的認識。本書將詳細剖析Java綫程的完整生命周期:從新生(New)、就緒(Runnable)、運行(Running)、阻塞(Blocked)到終止(Terminated)。你將理解綫程在不同狀態之間是如何轉換的,以及導緻這些轉換的內在機製。 綫程的創建與啓動: 除瞭傳統的`Thread`類繼承和`Runnable`接口實現方式,本書還會探討更現代、更靈活的綫程創建策略,並深入分析`start()`方法與`run()`方法的本質區彆,讓你深刻理解綫程的真正啓動過程。 綫程的調度: 理解Java虛擬機的綫程調度策略至關重要。我們將解析優先級調度、時間片輪轉等概念,並講解如何通過設置綫程優先級來影響其執行順序(盡管不建議過度依賴)。 綫程的同步與協作: 當多個綫程需要訪問共享資源時,同步就顯得尤為重要。本書將詳細介紹`synchronized`關鍵字的工作原理,包括對象鎖、類鎖以及如何避免死鎖。此外,我們還將深入講解`wait()`, `notify()`, `notifyAll()`這組強大的協作工具,讓你能夠設計齣綫程間精妙的通信機製。 綫程的終止: 優雅地終止綫程是編寫健壯並發程序的關鍵。本書將教你如何通過標誌位、中斷等方式安全地停止綫程,避免資源泄露和不確定的行為。 第二部分:並發工具箱——JDK並發包的深入探索 Java 5引入的`java.util.concurrent`(JUC)包是並發編程的利器,它提供瞭一係列預構建的高效並發工具,極大地簡化瞭並發編程的復雜性。本書將帶領你逐一剖析這些工具的強大功能和底層實現。 執行器框架(Executor Framework): 告彆手動創建和管理綫程的繁瑣。我們將深入講解`ExecutorService`接口,以及`ThreadPoolExecutor`等常用綫程池的配置與調優。你將學會如何根據應用場景選擇閤適的綫程池類型,並理解綫程池復用綫程、管理任務的原理,從而顯著提升係統吞吐量和資源利用率。 並發集閤(Concurrent Collections): 傳統的`java.util`集閤在多綫程環境下存在綫程安全問題。本書將詳細介紹`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等並發集閤的特性,分析它們是如何在不使用顯式鎖的情況下實現綫程安全的,以及它們在各種場景下的性能優勢。 同步器(Synchronizers): JUC包提供瞭比`synchronized`更靈活、更強大的同步原語。我們將深入講解`CountDownLatch`, `CyclicBarrier`, `Semaphore`, `Phaser`等同步器的用法,以及它們在實現復雜並發場景,如任務編排、資源限流等方麵的應用。 原子變量(Atomic Variables): 對於簡單的數值操作,使用鎖會帶來不必要的開銷。本書將介紹`AtomicInteger`, `AtomicLong`, `AtomicReference`等原子類,以及它們基於CAS(Compare-and-Swap)操作實現的無鎖原子更新,幫助你編寫齣更高效的並發代碼。 並發的鎖(Locks): `java.util.concurrent.locks`包提供瞭比`synchronized`更豐富的鎖機製。我們將詳細講解`ReentrantLock`, `ReentrantReadWriteLock`, `StampedLock`等鎖的特性,以及如何使用它們來精細化地控製鎖的獲取和釋放,解決死鎖問題,提高並發性能。 第三部分:並發設計模式與高級主題 掌握瞭並發工具,我們還需要學習如何將它們巧妙地組閤起來,形成健壯的並發設計。本書將深入探討一係列經典的並發設計模式,並觸及更高級的並發議題。 綫程安全的設計原則: 講解無狀態對象、不可變對象、綫程局部存儲(ThreadLocal)等設計思想,以及如何通過這些原則從源頭上避免綫程安全問題。 並發設計模式: 深入剖析如生産者-消費者模式、讀寫鎖模式、單例模式(在並發環境下的實現)、Future模式、Guarded Suspension模式等經典並發設計模式,並結閤實際代碼案例進行演示,幫助你理解這些模式的適用場景和實現細節。 並發的性能調優: 性能是並發編程的核心追求。本書將指導你如何識彆並發瓶頸,分析死鎖、活鎖、飢餓等問題,並提供一套係統性的性能調優方法論,包括綫程池參數調優、鎖的粒度控製、緩存一緻性等。 JVM與並發: 瞭解JVM在綫程管理和內存模型上的行為是深入理解並發的關鍵。我們將探討JVM的內存模型(Java Memory Model, JMM),分析happens-before原則,以及垃圾迴收(GC)在並發環境下的影響。 並發的測試與調試: 編寫並發程序容易齣錯,測試和調試也更具挑戰性。本書將介紹各種並發測試技術,包括單元測試、壓力測試、以及如何利用JVM提供的工具(如jstack, jmap, JConsole, VisualVM)進行並發程序的調試。 誰適閤閱讀本書? Java初學者: 希望在學習Java的同時,提前建立對並發編程的正確認知,避免日後踩坑。 中級Java開發者: 已經接觸過多綫程,但對並發原理、JUC包的使用和綫程安全問題仍感睏惑,希望係統提升並發編程能力。 高級Java開發者/架構師: 需要深入理解並發的底層機製,掌握高級並發設計模式,以構建高性能、高可用的分布式係統。 對性能優化感興趣的開發者: 想要瞭解如何通過並發技術提升應用程序的響應速度和吞吐量。 《Java綫程與並發編程實踐》不是一本速成手冊,它是一段探索之旅。 我們鼓勵讀者在閱讀過程中,勤於思考,動手實踐,通過大量的代碼示例來加深理解。本書所提供的知識和技能,將幫助你信心百倍地應對多核時代的挑戰,寫齣優雅、高效、穩健的Java並發程序。 讓你在每一次的並發編程實踐中,都能遊刃有餘,成為一名真正的多綫程“玩傢”。