前言
众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试的必问题,一个好的Java程序员是必须对并发编程这块有所了解的。
然而不论是哪个国家,什么背景的 Java 开发者,都对自己写的并发程序相当自信,但也会在出问题时表现得很诧异甚至一筹莫展。
可见,Java 并发编程显然不是一件能速成的能力,基础搭得越好,越全面,在实践中才会有更深刻的理解。
因此,大家不难发现 Java 并发问题一直是各个大厂面试的重点之一。我在平时的面试中,也发现很多候选人对一些基本的并发概念表示没听过,或原理不理解,可能知道一些却又讲不清楚,最终导致面试失败。
本文会结合实际中接触到的一些面试题,重点来聊一聊 Java 并发中的相关知识点。
Synchronized 相关问题
问题一:Synchronized 用过吗,其原理是什么?
问题二:你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁?
问题三:什么是可重入性,为什么说 Synchronized 是可重入锁?
问题四:JVM 对 Java 的原生锁做了哪些优化?
问题五:为什么说 Synchronized 是非公平锁?
问题六:什么是锁消除和锁粗化?
问题七:为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是
问题八:乐观锁一定就是好的吗?
可重入锁 ReentrantLock 及其他显式锁相关问题
问题一:跟 Synchronized 相比,可重入锁 ReentrantLock 其实现原理有什么不同?
问题二:那么请谈谈 AQS 框架是怎么回事儿?
问题三:请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同。
问题四:ReentrantLock 是如何实现可重入性的?
问题五:除了 ReetrantLock,你还接触过 JUC 中的哪些并发工具?
问题六:请谈谈 ReadWriteLock 和 StampedLock。
问题七:如何让 Java 的线程彼此同步?你了解过哪些同步器?请分别介绍下。
问题八:CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下呢?
Java 线程池相关问题
问题一:Java 中的线程池是如何实现的?
问题二:创建线程池的几个核心构造参数?
问题三:线程池中的线程是怎么创建的