多线程
1.基础
进程和线程

并行和并发

创建线程的方式

线程状态

如何保证线程的执行顺序


wait和sleep方法的不同

如何打断正在运行的线程

2.并发安全
synchronized底层原理
首先它是一个对象锁,

重量级锁和锁升级是什么
为什么需要轻量级锁
因为有些线程是交替执行的,不用竞争

JMM即Java的内存模型
它是一种规范,是多线程情况下对内存操作的规范

CAS
它是一种无锁的状态下来进行操作的

volatile的理解
可见性、禁止指令重排序



什么是AQS:抽象队列同步器
可以实现公平锁,也可以不实现公平锁

ReentrantLock的实现原理

synchronized和Lock的区别

死锁产生的条件是什么?
一个线程同时获取多把锁
如何进行死锁诊断:使用jps和jstack
可视化工具:jconsole和VisualVM

ConcurrentHashMap

导致并发程序出现问题的根本原因?
怎么保证多线程的执行安全?


3.线程池
因为创建线程会浪费内存空间
线程池的核心参数,执行原理
7个参数
是队列满了才会创建救急线程来执行任务


常见的阻塞队列


如何确定核心线程数量


线程池种类

为什么不用Executors来创建线程池

4.使用场景
CountDownLatch 倒计时锁


数据汇总

异步调用

如何控制某个方法允许并发访问线程的数量
通常用于那些资源有明确访问数量限制的场景,常用于限流

谈谈你对ThreadLocal的理解
多线程中解决线程安全的一个操作类
为了解决并发量并发访问冲突的问题

如何解决的:使用的ThreadLocalMap的方式,里面有一个数组table用来为每个线程存储数据的
ThreadLocal内存泄漏问题:
强引用:new的方式,JVM不会回收
软引用:




浙公网安备 33010602011771号