前言
- JVM 内存模型一共包括三个部分:
- 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区)、
 - 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 )
 - 保证程序在多线程环境下能够连续执行的程序计数器
 
 
特别地,我们当时就提到Java堆是进行垃圾回收的主要区域,故其也被称为GC堆;而方法区也有一个不太严谨的表述,就是永久代。总的来说,堆 (包括Java堆 和 方法区)是 垃圾回收的主要对象,特别是Java堆。
实际上,Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的堆区。关于对象分配内存问题,笔者的博文《JVM 内存模型概述》已经阐述了 如何划分可用空间及其涉及到的线程安全问题,本文将结合垃圾回收策略进一步给出 内存分配规则。另外,我们知道垃圾回收机制是Java语言一个显著的特点,其可以有效的防止内存泄露、保证内存的有效使用,从而使得Java程序员在编写程序的时候不再需要考虑内存管理问题。Java 垃圾回收机制要考虑的问题很复杂,本文阐述了其三个核心问题
线程
- 线程的启动
 - 实现Runnab1e接口
 - 继承Thread类
 - 实现Callable接口
 - 线程的状态
 - 线程的方法
 - 线程的优先级
 - 守护线程
 - 未捕获异常处理器
 

并发编程的问题
- 线程引入开销:上下文切换与内存同步
 - 线程安全性(原子性+可见性)
 - 死锁
 

线程间通信/线程同步 工具使用
- synchronized
 - Lock
 - volatile
 - Atomic
 

Lock使用 深入
- 可重入锁 ReentrantLock
 - Condition与wait¬ify区别
 - await&signal
 - 公平锁
 - 读写锁 ReentrantReadWriteLock
 - LockSupport(锁住的是线程,synchronized锁住的是对象)
 - synchronized与Lock的区别
 - 原子操作类使用
 

Java内存模型 线程同步工具原理
- JMM抽象结构
 - 指令重排序
 - 内存屏障
 - happens-before(抽象概念,基于内存屏障)
 - 顺序一致性
 - volatile原理
 - synchronized原理
 - 原子操作原理
 - 锁的比较
 - 锁的优化
 - 锁的分类
 - 偏向锁(只有一个线程进入临界区)
 - 轻量级锁(多个线程交替进入临界区)
 - 重量级锁(多个线程同时进入临界区)
 - CPU如何实现原子操作
 - Java如何实现原子操作
 - CAS在OpenJDK中的实现
 

同步容器
- ConcurrentHashMap
 - CopyOnWriteArrayList
 - BlockingQueue
 - ThreadLocal
 

同步工具使用
- Semaphore (信号量)
 - Cycli eBarrier (可循环使用的屏障/栅栏)
 - Exchanger (两个线程交换数据)
 - CountDownLatch (闭锁)
 - FutureTask (Future实现类)
 - 将批量同步操作转为异步操作(并行流/CompletableFuture)
 - 多个异步任务合并
 - API
 

线程池使用
- 引入原因
 - 继承体系
 - ExecutorService
 - ScheduledExecutorService
 - ThreadPoolExecutor
 - 创建线程池
 - 线程动态变化
 - 扩展ThreadPoolExecutor
 - ScheduledThreadPoolExecutor
 - Executors
 - CompletionService
 

J.U.C 源码解析
- AQS的接口
 - AQS使用实例(互斥锁,tryAcquire只需一次CAS)
 - AQS实现
 - 同步队列
 - 独占式同步状态
 - 共享式同步状态
 - 独占式超时获取同步状态
 - ReentrantLock公平锁
 - ReentrantReadWriteLock
 - 读写状态的设计
 - 写锁的获取与释放
 - 读锁的获取与释放(放弃)
 - 锁降级
 - LockSupport
 - Condition
 - 等待队列
 - AtomicInteger
 - ThreadPoolExeuctor
 - 状态转换
 - 成员变量
 - 构造方法
 - 执行任务
 

并发体系思维导图
Java内存模型(JMM)
- 线程通信机制
 - 内存模型
 - synchronized
 - volatile
 - DCL
 

并发基础
- AQS
 - CAS
 

锁
- ReentrantLock
 - ReentrantReadWriteLock
 - Condition
 

并发工具类
- CyclicBarrier
 - CountDownLatch
 - Semaphore
 - Exchanger
 

其他
- ThreadLocal
 - Fork/Join
 

Java并发集合
- ConcurrentHashMap
 - ConcurrentLinkedQueue
 - Concurr entSkipListMap
 - ConcurrentSkipListSet
 

atomic
- 基本类型类
 - 数组
 - 引用类型
 - 字段类
 

阻塞队列
- ArrayBlockingQueue
 - LinkedBlockingQueue
 - PriorityBlockingQueue
 - DelayQueue
 - SynchronousQueue
 - LinkedTransferQueue
 - LinkedBlockingDeque
 

线程池
- Executor
 - Future
 

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。
我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。
不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下
写在最后
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

Mybatis面试专题

MySQL面试专题

并发编程面试专题
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录










