01 并发编程72高频面试
1.Java中守护线程和本地线程区别
2.线程与进程的区别
3.什么是多线程中的上下文切换
4.死锁与活锁的区别,死锁与饥饿的区别
5.Java中用到的线程调度算法是什么
6.什么是线程组,为什么在Java中不推荐使用
7.为什么使用Executor框架
8.在Java中Executor和Executors的区别
9.什么是原子操作,在Java Concurrency API中有哪些原子类(atomic classes)
10.Java Concurrency API中的Lock接口(Lock interface)是什么,对比同步它有什么优势
11.什么是Executors框架
12.什么是阻塞队列,阻塞队列的实现原理是什么,如何使用阻塞队列来实现生产者
13.什么是Callable和Future
14.什么是FutureTask,使用ExecutorService启动任务
15.什么是并发容器的实现
16.多线程同步和互斥有几种实现方法,都是什么
17.什么是竞争条件?你怎样发现和解决竞争
18.如何使用thread dump,如何分析Thread dump
19.为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法
20.Java中你怎样唤醒一个阻塞的线程
21.在Java中CycliBarriar和CountdownLatch有什么区别
22.什么是不可变对象,它对写并发应用有什么帮助
23.Java中用到的线程调度算法是什么
24.什么是线程组,为什么在Java中不推荐使用
25.为什么使用Executor框架比使用应用创建和管理线程好
26.Java中有几种方法可以实现一个线程
27.如何停止一个正在运行的线程
28.notify()和notifyAll()有什么区别
29.什么是Daemon线程,它有什么意义
30.Java如何实现多线程之间的通讯和协作
31.什么是可重入锁(ReentrantLock)
32.当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法
33.乐观锁和悲观锁的理解及如何实现,有哪些实现方式
34.SynchronizedMap和ConcurrentHashMap有什么区别
35.CopyOnWriteArrayList可以用于什么应用场景
36.什么叫线程安全,servlet是线程安全吗
37.volatile有什么用,能否用一句话说明下volatile的应用场景
38.为什么代码会重排序
39.在java中wait和sleep方法的不同
40.一个线程运行时发生异常会怎样
41.如何在两个线程间共享数据
42.Java中notify 和 notifyAll有什么区别
43.为什么wait, notify 和 notifyAll这些方法不在thread类里面
44.什么是ThreadLocal变量
45.Java中interrupted 和 isInterrupted方法的区别
46.为什么wait和notify方法要在同步块中调用
47.为什么你应该在循环中检查等待条件
48.Java中的同步集合与并发集合有什么区别
49.什么是线程池,为什么要使用它
50.怎么检测一个线程是否拥有锁
51.你如何在Java中获取线程堆栈
52.JVM中哪个参数是用来控制线程的栈堆栈小的
53.Thread类中的yield方法有什么作用
54.Java中ConcurrentHashMap的并发度是什么
55.Java中Semaphore是什么
56.Java线程池中submit() 和 execute()方法有什么区别
57.什么是阻塞式方法
58.Java中的ReadWriteLock是什么、
59.volatile 变量和 atomic 变量有什么不同
60.可以直接调用Thread类的run ()方法么
61.如何让正在运行的线程暂停一段时间
62.你对线程优先级的理解是什么
63.什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )
64.你如何确保main()方法所在的线程是Java 程序最后结束的线程
65.线程之间是如何通信的
66.为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object 类里
67.为什么wait(), notify()和notifyAll ()必须在同步方法或者同步块中被调用
68.为什么Thread类的sleep()和yield ()方法是静态的
69.如何确保线程安全
70.同步方法和同步块,哪个是更好的选择
71.如何创建守护线程
72.什么是Java Timer 类,如何创建一个有特定时间间隔的任务
并发编程72高频面试:
02 思维脑图
(1)Java并发体系
(2)多线程并发编程
03 必备知识点
(1)Synchronized 相关问题
问 题 一 : Synchronized 用 过 吗 , 其 原 理 是 什 么 ?
问 题 二 : 你 刚 才 提 到 获 取 对 象 的 锁 , 这 个 “ 锁 ” 到 底 是 什 么 ? 如 何 确 定
对 象 的 锁 ?
问 题 三 : 什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 ?
问 题 四 : JVM 对 Java 的 原 生 锁 做 了 哪 些 优 化 ?
问 题 五 : 为 什 么 说 Synchronized 是 非 公 平 锁 ?
问 题 六 : 什 么 是 锁 消 除 和 锁 粗 化 ?
问 题 七 : 为 什 么 说 Synchronized 是 一 个 悲 观 锁 ? 乐 观 锁 的 实 现 原 理
又 是 什 么 ? 什 么 是 CAS, 它 有 什 么 特 性 ?
问 题 八 : 乐 观 锁 一 定 就 是 好 的 吗 ?
(2)可重入锁 ReentrantLock 及其他显式锁相关问题
问 题 一 : 跟 Synchronized 相 比 , 可 重 入 锁 ReentrantLock 其 实 现
原 理 有 什 么 不 同 ?
问 题 二 : 那 么 请 谈 谈 AQS 框 架 是 怎 么 回 事 儿 ?
问 题 三 : 请 尽 可 能 详 尽 地 对 比 下 Synchronized 和 ReentrantLock
的 异 同 。
问 题 四 : ReentrantLock 是 如 何 实 现 可 重 入 性 的 ?
问 题 五 : 除 了 ReetrantLock, 你 还 接 触 过 JUC 中 的 哪 些 并 发 工 具 ?
问 题 六 : 请 谈 谈 ReadWriteLock 和 StampedLock。
问 题 七 : 如 何 让 Java 的 线 程 彼 此 同 步 ? 你 了 解 过 哪 些 同 步 器 ? 请 分 别
介 绍 下 。
问 题 八 : CyclicBarrier 和 CountDownLatch 看 起 来 很 相 似 , 请 对 比
下 呢 ?
(3)Java 线程池相关问题
问 题 一 : Java 中 的 线 程 池 是 如 何 实 现 的 ?
问 题 二 : 创 建 线 程 池 的 几 个 核 心 构 造 参 数 ?
问 题 三 : 线 程 池 中 的 线 程 是 怎 么 创 建 的 ? 是 一 开 始 就 随 着 线 程 池 的 启 动
创 建 好 的 吗 ?
问 题 四 : 既 然 提 到 可 以 通 过 配 置 不 同 参 数 创 建 出 不 同 的 线 程 池 , 那 么
Java 中 默 认 实 现 好 的 线 程 池 又 有 哪 些 呢 ? 请 比 较 它 们 的 异 同 。
问 题 六 : 如 何 在 Java 线 程 池 中 提 交 线 程 ?
(4)Java 内存模型相关问题
问 题 一 : 什 么 是 Java 的 内 存 模 型 , Java 中 各 个 线 程 是 怎 么 彼 此 看 到
对 方 的 变 量 的 ?
问 题 二 : 请 谈 谈 volatile 有 什 么 特 点 , 为 什 么 它 能 保 证 变 量 对 所 有 线
程 的 可 见 性 ?
问 题 三 : 既 然 volatile 能 够 保 证 线 程 间 的 变 量 可 见 性 , 是 不 是 就 意 味
着 基 于 volatile 变 量 的 运 算 就 是 并 发 安 全 的 ?
问 题 四 : 请 对 比 下 volatile 对 比 Synchronized 的 异 同 。
问 题 六 : 很 多 人 都 说 要 慎 用 ThreadLocal, 谈 谈 你 的 理 解 , 使 用
ThreadLocal 需 要 注 意 些 什 么 ?
必备知识点:
04 学习书籍
(1)JAVA并发编程实践(PDF)
JAVA并发编程实践:
(2)Java多线程编程核心技术_完整版(PDF)
最后说一次:有需要文章里小编分享的所有并发编程资料的朋友可以点击下面的链接进去石墨文档免费领取~
免费领:java架构专题+Redis+并发编程+架构资料+MongoDB+大厂面试真题(含解析)+学习视频+数据库+学习书籍+学习思维导图