天天看點

開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

前言

在高并發下,Java程式的GC問題屬于很典型的一類問題,帶來的影響往往會被進一步放大。不管是「GC頻率過快」還是「GC耗時太長」,由于GC期間都存在Stop The World問題,是以很容易導緻服務逾時,引發性能問題。

我們團隊負責的廣告系統承接了比較大的C端流量,平峰期間的請求量基本達到了上千QPS,過去也遇到了很多次GC相關的線上問題。

這篇文章,我再分享一個更棘手的Young GC耗時過長的線上案例,同時會整理下YGC相關的知識點,希望讓你有所收獲。内容分成以下2個部分:

  • 從一次YGC耗時過長的案例說起
  • YGC的相關知識點總結

初識多線程

  • 介紹程序
  • 回到線程
  • 程序與線程
  • 并行與并發
  • Javs實作多線程
  • Java實作多線程需要注意的細節
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

Thread線程類API

設定線程名

守護線程

優先級線程

線程生命周期

開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

使用多線程需要注意的問題

  • 線程安全問題
  • 性能問題
  • 安全釋出對象
  • 簡述解決線程安全性的辦法
  • 原子性和可見性
  • 線程封閉
  • 不變性
  • 線程安全性委托
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

synchronized鎖和lock鎖

  • synchronized鎖
  • Lock顯式鎖
  • Java鎖簡單總結
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

AQS

  • AQS是什麼?
  • 同步狀态
  • 先進先出隊列
  • sacquire方法
  • release方法
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

ReentrantLock

  • 内部類
  • 構造方法
  • 非公平lock方法
  • 公平lock方法
  • unlock方法
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

ReentrantReadWriteLock

  • ReentrantReadWriteLock内部類
  • 讀鎖和寫鎖的狀态表示
  • 寫鎖的擷取
  • 讀鎖獲職
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

線程池

  • 線程池簡介
  • JDK提供的線程池API
  • ForkJoinPool線程池
  • Callable和Future
  • ThreadPoolExecutor詳解
  • execute執行方法
  • 線程池關閉
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

死鎖

  • 鎖順序死鎖
  • 動态鎖順序死鎖
  • 協作對象之間發生死鎖
  • 固定鎖順序避免死鎖
  • 開放調用避免死鎖
  • 使用定時鎖
  • 死鎖檢測
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

線程常用的工具類

  • CountDownLatch
  • CyclicBarrier
  • Semaphore
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

Atomic

  • 基礎鋪墊
  • CAS失敗重試(自旋)
  • 原子變量類簡單介紹
  • LongAdder、AtomicLong性能對比
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

ThreadLocal

  • 什麼是ThreadLocal
  • 為什麼要學習ThreadLocal?
  • ThreadLocal底層原理總結
  • 避免記憶體洩露
開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

線程、資料庫、算法、JVM、分布式、微服務、架構、Spring相關知識

開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

一線網際網路P7面試集錦+各種大廠面試集錦

開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal

資料領取方式:戳這裡

學習筆記以及面試真題解析

網際網路P7面試集錦+各種大廠面試集錦

[外鍊圖檔轉存中…(img-e2SxYO2X-1619668245539)]

資料領取方式:戳這裡

學習筆記以及面試真題解析

開源至上:進階學習工作最全指南!Java面試題及解析初識多線程Thread線程類API使用多線程需要注意的問題synchronized鎖和lock鎖AQSReentrantLockReentrantReadWriteLock線程池死鎖線程常用的工具類AtomicThreadLocal