天天看点

开源至上:进阶学习工作最全指南!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