- 線程基礎升華
- 第01講:為何說只有 1 種實現線程的方法?
- 第02講:如何正確停止線程?為什么 volatile 標記位的停止方法是錯誤的?
- 第03講:線程是如何在 6 種狀態之間轉換的?
- 第04講:wait/notify/notifyAll 方法的使用注意事項?
- 第05講:有哪幾種實現生產者消費者模式的方法?
- 究竟什么是線程安全?
- 第06講:一共有哪 3 類線程安全問題?
- 第07講:哪些場景需要額外注意線程安全問題?
- 第08講:為什么多線程會帶來性能問題?
- 線程池
- 第09講:使用線程池比手動創建線程好在哪里?
- 第10講:線程池的各個參數的含義?
- 第11講:線程池有哪 4 種拒絕策略?
- 第12講:有哪 6 種常見的線程池?什么是 Java8 的 ForkJoinPool?
- 第13講:線程池常用的阻塞隊列有哪些?
- 第14講:為什么不應該自動創建線程池?
- 第15講:合適的線程數量是多少?CPU 核心數和線程數的關系?
- 第16講:如何根據實際需要,定制自己的線程池?
- 第17講:如何正確關閉線程池?shutdown 和 shutdownNow 的區別?
- 第18講:線程池實現“線程復用”的原理?
- 各種各樣的“鎖”
- 第19講:你知道哪幾種鎖?分別有什么特點?
- 第20講:悲觀鎖和樂觀鎖的本質是什么?
- 第21講:如何看到 synchronized 背后的“monitor 鎖”?
- 第22講:synchronized 和 Lock 孰優孰劣,如何選擇?
- 第23講:Lock 有哪幾個常用方法?分別有什么用?
- 第24講:講一講公平鎖和非公平鎖,為什么要“非公平”?
- 第25講:讀寫鎖 ReadWriteLock 獲取鎖有哪些規則?
- 第26講:讀鎖應該插隊嗎?什么是讀寫鎖的升降級?
- 第27講:什么是自旋鎖?自旋的好處和后果是什么呢?
- 第28講:JVM 對鎖進行了哪些優化?
- 并發容器面面觀
- 第29講:HashMap 為什么是線程不安全的?
- 第30講:ConcurrentHashMap 在 Java7 和 8 有何不同?
- 第31講:為什么 Map 桶中超過 8 個才轉為紅黑樹?
- 第32講:同樣是線程安全,ConcurrentHashMap 和 Hashtable 的區別?
- 第33講:CopyOnWriteArrayList 有什么特點?
- 阻塞隊列
- 第34講:什么是阻塞隊列?
- 第35講:阻塞隊列包含哪些常用的方法?add、offer、put 等方法的區別?
- 第36講:有哪幾種常見的阻塞隊列?
- 第37講:阻塞和非阻塞隊列的并發安全原理是什么?
- 第38講:如何選擇適合自己的阻塞隊列?
- 原子類
- 第39講:原子類是如何利用 CAS 保證線程安全的?
- 第40講:AtomicInteger 在高并發下性能不好,如何解決?為什么?
- 第41講:原子類和 volatile 有什么異同?
- 第42講:AtomicInteger 和 synchronized 的異同點?
- TheadLocal
- 第44講:ThreadLocal 適合用在哪些實際生產的場景中?
- 第45講:ThreadLocal 是用來解決共享資源的多線程訪問的問題嗎?
- 第46講:多個 ThreadLocal 在 Thread 中的 threadlocals 里是怎么存儲的?
- 第47講:內存泄漏——為何每次用完 ThreadLocal 都要調用 remove()?
- Future 掌控未來
- 第48講:Callable 和 Runnable 的不同?
- 第49講:Future 的主要功能是什么?
- 第50講:使用 Future 有哪些注意點?Future 產生新的線程了嗎?
- 線程協作
- 第52講:信號量能被 FixedThreadPool 替代嗎?
- 第53講:CountDownLatch 是如何安排線程執行順序的?
- 第54講:CyclicBarrier 和 CountdownLatch 有什么異同?
- 第55講:Condition、object.wait() 和 notify() 的關系?
- Java 內存模型
- 第56講:講一講什么是 Java 內存模型?
- 第57講:什么是指令重排序?為什么要重排序?
- 第58講:Java 中的原子操作有哪些注意事項?
- 第59講:什么是“內存可見性”問題?
- 第60講:主內存和工作內存的關系?
- 第61講:什么是 happens-before 規則?
- 第62講:volatile 的作用是什么?與 synchronized 有什么異同?
- 第63講:單例模式的雙重檢查鎖模式為什么必須加 volatile?
- CAS 原理
- 第64講:你知道什么是 CAS 嗎?
- 第65講:CAS 和樂觀鎖的關系,什么時候會用到 CAS?
- 第66講:CAS 有什么缺點?
- 死鎖問題
- 第67講:如何寫一個必然死鎖的例子?
- 第68講:發生死鎖必須滿足哪 4 個條件?
- 第69講:如何用命令行和代碼定位死鎖?
- 第70講:有哪些解決死鎖問題的策略?
- 第71講:講一講經典的哲學家就餐問題
- final 關鍵字和“不變性”
- 第72講:final 的三種用法是什么?
- 第73講:為什么加了 final 卻依然無法擁有“不變性”?
- 第74講:為什么 String 被設計為是不可變的?
- AQS 框架
- 第75講:為什么需要 AQS?AQS 的作用和重要性是什么?
- 第76講:AQS 的內部原理是什么樣的?
- 第77講:AQS 在 CountDownLatch 等類中的應用原理是什么?
- 總結
- 第78講:一份獨家的 Java 并發工具圖譜