多线程面试

https://kaiwu.lagou.com/course/courseInfo.htm?courseId=1#/detail/pc?id=6

 

考察点
讲解完本课时的知识点,总结下面试考察点。

要理解线程同步与互斥的原理,包括临界资源、临界区的概念,知道重量级锁、轻量级锁、自旋锁、偏向锁、重入锁、读写锁的概念。

要掌握线程安全相关机制,例如 CAS、synchronized、Lock 三种同步方式的实现原理、要明白 ThreadLocal 是每个线程独享的局部变量,了解 ThreadLocal 使用弱引用的 ThreadLocalMap 保存不同的 ThreadLocal 变量

要了解 JUC 中的工具类的使用场景与主要的几种工具类的实现原理,例如 Reentrantlock,ConcurrentHashMap、LongAdder 等实现方式。

要熟悉线程池的原理、使用场景、常用配置,例如大量短期任务的场景适合使用 Cached 线程池系统资源比较紧张时,可以选择固定线程池。另外注意慎用无界队列,可能会有 OOM 的风险。

要深刻理解线程的同步与异步、阻塞与非阻塞,同步和异步的区别在于任务是否是同一个线程执行,阻塞与非阻塞的区别在于异步执行任务时,线程是会阻塞等待结果,还是会继续执行后续逻辑。

加分项
掌握了上面这些内容,如果能做到这几点加分项,一定会给面试官留下更好的印象。

可以结合实际项目经验或者实际案例介绍原理,例如介绍线程池设置时,可以提到自己的项目中有一个需要高吞吐量的场景,使用了 Cached 的线程池。

如果有过解决多线程问题的经验或者排查思路的话会获得面试加分。

能够熟悉常用的线程分析工具与方法,例如会用 jstack 分析线程的运行状态,查找锁对象持有状况等。

了解 Java 8 对 JUC 工具类做了哪些增强,例如提供了 LongAdder 来替换 AtomicLong,更适合并发度比较高的场景。

了解 Reactive 异步编程思想,了解 back pressure 背压的概念与应用场景

posted @ 2022-02-24 09:41  Nausicaa0505  阅读(33)  评论(0编辑  收藏  举报