1、什么是线程和进程
进程是分配资源的基本单位
线程是资源调度的最小单位
2、请简要描述线程与进程的关系,区别及优缺点?
3、说说并发与并⾏的区别?
4、为什么要使⽤多线程呢?
5、使⽤多线程可能带来什么问题?
6、说说线程的⽣命周期和状态?
7、什么是上下⽂切换?
8、什么是线程死锁?如何避免死锁?
9、说说 sleep() ⽅法和 wait() ⽅法区别和共同点?
10、为什么我们调⽤ start() ⽅法时会执⾏ run() ⽅法,为什么我 们不能直接调⽤ run() ⽅法?
11、说⼀说⾃⼰对于 synchronized 关键字的了解
12、说说⾃⼰是怎么使⽤ synchronized 关键字
13、构造⽅法可以使⽤ synchronized 关键字修饰么?
14、讲⼀下 synchronized 关键字的底层原理
15、为什么要弄⼀个 CPU ⾼速缓存呢?
16、讲⼀下 JMM(Java 内存模型)
17、说说 synchronized 关键字和 volatile 关键字的区别
18、ThreadLocal 了解么?
19、ThreadLocal 原理讲⼀下
20、ThreadLocal 内存泄露问题了解不?
21、线程池
(1)使用线程池的好处
①降低资源消耗
②提高响应速度
③提高线程可管理性
(2)Executor框架
避免 this 逃逸问题:构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误。
由任务(Runnable/Callable)、任务的执行(Executor)、异步计算结果(Future)构成


(3)ThreadPoolExecutor类
三个重要参数:
①corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。
②maximumPoolSize : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
③workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
其他参数
①keepAliveTime:当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被回收销毁;
②unit : keepAliveTime 参数的时间单位。
③threadFactory :executor 创建新线程的时候会用到。
④handler :饱和策略。
22、介绍⼀下 Atomic 原⼦类
23、JUC 包中的原⼦类是哪 4 类?
24、AQS 了解么?
25、AQS 原理了解么?
26、AQS 组件总结
27、⽤过 CountDownLatch 么?什么场景下⽤的?
浙公网安备 33010602011771号