前 言
第1章 Java多綫程技能,
1.1 進程和多綫程的概念及綫程的優點
1.2 使用多綫程
1.2.1 繼承Thread類
1.2.2 實現Runnable接口
1.2.3 實例變量與綫程安全
1.2.4 留意i——與System.out.println()的異常
1.3 currentThread()方法
1.4 isAlive()方法
1.5 sleep()方法
1.6 getId()方法
1.7 停止綫程
1.7.1 停止不瞭的綫程
1.7.2 判斷綫程是否是停止狀態
1.7.3 能停止的綫程——異常法
1.7.4 在沉睡中停止
1.7.5 能停止的綫程——暴力停止
1.7.6 方法stop()與java.lang.ThreadDeath異常
1.7.7 釋放鎖的不良後果
1.7.8 使用return停止綫程
1.8 暫停綫程
1.8.1 suspend與resume方法的使用
1.8.2 suspend與resume方法的缺點——獨占
1.8.3 suspend與resume方法的缺點——不同步
1.9 yield方法
1.10 綫程的優先級
1.10.1 綫程優先級的繼承特性
1.10.2 優先級具有規則性
1.10.3 優先級具有隨機性
1.10.4 看誰運行得快
1.11 守護綫程
1.12 本章小結
第2章 對象及變量的並發訪問
2.1 synchronized同步方法
2.1.1 方法內的變量為綫程安全
2.1.2 實例變量非綫程安全
2.1.3 多個對象多個鎖
2.1.4 synchronized方法與鎖對象
2.1.5 髒讀
2.1.6 synchronized鎖重入
2.1.7 齣現異常,鎖自動釋放
2.1.8 同步不具有繼承性
2.2 synchronized同步語句塊
2.2.1 synchronized方法的弊端
2.2.2 synchronized同步代碼塊的使用
2.2.3 用同步代碼塊解決同步方法的弊端
2.2.4 一半異步,一半同步
2.2.5 synchronized代碼塊間的同步性
2.2.6 驗證同步synchronized(this)代碼塊是鎖定當前對象的
2.2.7 將任意對象作為對象監視器
2.2.8 細化驗證3個結論
2.2.9 靜態同步synchronized方法與synchronized(class)代碼塊
2.2.10 數據類型String的常量池特性
2.2.11 同步synchronized方法無限等待與解決
2.2.12 多綫程的死鎖
2.2.13 內置類與靜態內置類
2.2.14 內置類與同步:實驗1
2.2.15 內置類與同步:實驗2
2.2.16 鎖對象的改變
2.3 volatile關鍵字
2.3.1 關鍵字volatile與死循環
2.3.2 解決同步死循環
2.3.3 解決異步死循環
2.3.4 volatile非原子的特性
2.3.5 使用原子類進行i++操作
2.3.6 原子類也並不完全安全
2.3.7 synchronized代碼塊有volatile同步的功能
2.4 本章總結
第3章 綫程間通信
3.1 等待/通知機製
3.1.1 不使用等待/通知機製實現綫程間通信
3.1.2 什麼是等待/通知機製
3.1.3 等待/通知機製的實現
3.1.4 方法wait()鎖釋放與notify()鎖不釋放
3.1.5 當interrupt方法遇到wait方法
3.1.6 隻通知一個綫程
3.1.7 喚醒所有綫程
3.1.8 方法wait(long)的使用
3.1.9 通知過早
3.1.10 等待wait的條件發生變化
3.1.11 生産者/消費者模式實現
3.1.12 通過管道進行綫程間通信:字節流
3.1.13 通過管道進行綫程間通信:字符流
3.1.14 實戰:等待/通知之交叉備份
3.2 方法join的使用
3.2.1 學習方法join前的鋪墊
3.2.2 用join()方法來解決
3.2.3 方法join與異常
3.2.4 方法join(long)的使用
3.2.5 方法join(long)與sleep(long)的區彆
3.2.6 方法join()後麵的代碼提前運行:齣現意外
3.2.7 方法join()後麵的代碼提前運行:解釋意外
3.3 類ThreadLocal的使用
3.3.1 方法get()與null
3.3.2 驗證綫程變量的隔離性
3.3.3 解決get()返迴null問題
3.3.4 再次驗證綫程變量的隔離性
3.4 類InheritableThreadLocal的使用
3.4.1 值繼承
3.4.2 值繼承再修改
3.5 本章總結
第4章 Lock的使用
4.1 使用ReentrantLock類
4.1.1 使用ReentrantLock實現同步:測試1
4.1.2 使用ReentrantLock實現同步:測試2
4.1.3 使用Condition實現等待/通知錯誤用法與解決
4.1.4 正確使用Condition實現等待/通知
4.1.5 使用多個Condition實現通知部分綫程:錯誤用法
4.1.6 使用多個Condition實現通知部分綫程:正確用法
4.1.7 實現生産者/消費者模式:一對一交替打印
4.1.8 實現生産者/消費者模式:多對多交替打印
4.1.9 公平鎖與非公平鎖
4.1.10 方法getHoldCount()、getQueueLength()和getWaitQueueLength()的測試
4.1.11 方法hasQueuedThread()、hasQueuedThreads()和hasWaiters()的測試
4.1.12 方法isFair()、isHeldByCurrentThread()和isLocked()的測試
4.1.13 方法lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUnit unit)的測試
4.1.14 方法awaitUninterruptibly()的使用
4.1.15 方法awaitUntil()的使用
4.1.16 使用Condition實現順序執行
4.2 使用ReentrantReadWriteLock類
4.2.1 類ReentrantReadWriteLock的使用:讀讀共享
4.2.2 類ReentrantReadWriteLock的使用:寫寫互斥
4.2.3 類ReentrantReadWriteLock的使用:讀寫互斥
4.2.4 類ReentrantReadWriteLock的使用:寫讀互斥
4.3 本章總結
第5章 定時器Timer
5.1 定時器Timer的使用
5.1.1 方法schedule(TimerTask task, Date time)的測試
5.1.2 方法schedule(TimerTask task, Date firstTime, long period)的測試
5.1.3 方法schedule(TimerTask task, long delay)的測試
5.1.4 方法schedule(TimerTask task, long delay, long period)的測試
5.1.5 方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的測試
5.2 本章總結
第6章 單例模式與多綫程
6.1 立即加載/"餓漢模式"
6.2 延遲加載/"懶漢模式"
6.3 使用靜態內置類實現單例模式
6.4 序列化與反序列化的單例模式實現
6.5 使用static代碼塊實現單例模式
6.6 使用enum枚舉數據類型實現單例模式
6.7 完善使用enum枚舉實現單例模式
6.8 本章總結
第7章 拾遺增補
7.1 綫程的狀態
7.1.1 驗證NEW、RUNNABLE和TERMINATED
7.1.2 驗證TIMED_WAITING
7.1.3 驗證BLOCKED
7.1.4 驗證WAITING
7.2 綫程組
7.2.1 綫程對象關聯綫程組:1級關聯
7.2.2 綫程對象關聯綫程組:多級關聯
7.2.3 綫程組自動歸屬特性
7.2.4 獲取根綫程組
7.2.5 綫程組裏加綫程組
7.2.6 組內的綫程批量停止
7.2.7 遞歸與非遞歸取得組內對象
7.3 使綫程具有有序性
7.4 SimpleDateFormat非綫程安全
7.4.1 齣現異常
7.4.2 解決異常方法1
7.4.3 解決異常方法2
7.5 綫程中齣現異常的處理
7.6 綫程組內處理異常
7.7 綫程異常處理的傳遞
7.8 本章總結
· · · · · · (
收起)