获取链接:《2024最新Java面试题及答案(带完整目录)》
更多技术书籍:技术书籍分享,前端、后端、大数据、AI、人工智能...
4.1.9.8.
可重入锁(递归锁)
.................................................................................69
4.1.9.9.
公平锁与非公平锁
...........................................................................................70
公平锁(
Fair
)
.................................................................................................................70
非公平锁(
Nonfair
)
.........................................................................................70
4.1.9.10.
ReadWriteLock
读写锁
...............................................................................................70
读锁
........................................................................................................................70
写锁
........................................................................................................................70
4.1.9.11. 共享锁和独占锁 ......................................................................................70
独占锁
..............................................................................................................................70
共享锁
......................................................................................................................70
4.1.9.12. 重量级锁(Mutex Lock
)
............................................................................71
4.1.9.13. 轻量级锁.....................................................................................................................71
锁升级
.....................................................................................................................................71
4.1.9.14. 偏向锁................................................................................................................71
4.1.9.15. 分段锁.........................................................................................................................71
4.1.9.16. 锁优化........................................................................................................................71
减少锁持有时间
...................................................................................................................72
减小锁粒度
..............................................................................................................................72
锁分离
.......................................................................................................................................72
锁粗化
..........................................................................................................................................72
锁消除
......................................................................................................................................72
4.1.10.
线程基本方法
..........................................................................................72
4.1.10.1.线程等待(wait
)
.................................................................................73
4.1.10.2.
线程睡眠(
sleep
)
.............................................................................................................................73
4.1.10.3.
线程让步(
yield
)
..............................................................................................................................73
4.1.10.4. 线程中断(interrupt
)
.......................................................................................73
4.1.10.5.
Join
等待其他线程终止
..............................................................................................74
4.1.10.6. 为什么要用 join()
方法?
..............................................................................74
4.1.10.7. 线程唤醒(notify
)
...........................................................................................74
4.1.10.8. 其他方法:...........................................................................................................74
4.1.11.
线程上下文切换
............................................................................................................75
4.1.11.1. 进程...........................................................................................................................75
4.1.11.2. 上下文................................................................................................................75
4.1.11.3. 寄存器...................................................................................................................75
4.1.11.4. 程序计数器..........................................................................................................75
4.1.11.5.
PCB-
“切换桢”
.................................................................................................................................75
4.1.11.6.
上下文切换的活动:
..........................................................................................................................76
4.1.11.7.
引起线程上下文切换的原因
..............................................................................................................76
4.1.12.
同步锁与死锁
..............................................................................................................................76
4.1.12.1.
同步锁
..................................................................................................................................................76
4.1.12.2.
死锁
......................................................................................................................................................76
4.1.13.
线程池原理
..................................................................................................................................76
4.1.13.1.
线程复用
..............................................................................................................................................76
4.1.13.2.
线程池的组成
......................................................................................................................................76
4.1.13.3.
拒绝策略
..............................................................................................................................................78
4.1.13.4.
Java 线程池工作过程
.........................................................................................................................78
4.1.14. JAVA
阻塞队列原理
....................................................................................................................79
4.1.14.1.
阻塞队列的主要方法
..........................................................................................................................80
插入操作:
............................................................................................................................................................80
获取数据操作:
....................................................................................................................................................81
4.1.14.2.
Java 中的阻塞队列
.............................................................................................................................81
4.1.14.3.
ArrayBlockingQueue(公平、非公平)
.......................................................................................82
4.1.14.4.
LinkedBlockingQueue(两个独立锁提高并发)
.........................................................................82
4.1.14.5.
PriorityBlockingQueue(compareTo 排序实现优先)
..............................................................82
4.1.14.6.
DelayQueue(缓存失效、定时任务 )
..........................................................................................82
4.1.14.7.
SynchronousQueue(不存储数据、可用于传递数据)
..............................................................83
4.1.14.8.
LinkedTransferQueue
......................................................................................................................83
13/04/2018
Page 5 of 283
4.1.14.9.
LinkedBlockingDeque
.....................................................................................................................83
4.1.15. CyclicBarrier
、
CountDownLatch
、
Semaphore
的用法
........................................................84
4.1.15.1.
CountDownLatch(线程计数器 )
................................................................................................84
4.1.15.2.
CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行)
...............................................84
4.1.15.3.
Semaphore(信号量-控制同时访问的线程个数)
.......................................................................85
4.1.16. volatile
关键字的作用(变量可见性、禁止重排序)
.........................................87
变量可见性
....................................................................................................................87
禁止重排序
.........................................................................................................................87
比
sychronized
更轻量级的同步锁
...........................................................................................87
适用场景
............................................................................................................................87
4.1.17.
如何在两个线程之间共享数据
.......................................................................88
将数据抽象成一个类,并将数据的操作作为这个类的方法
...............................................88
Runnable
对象作为一个类的内部类
......................................................................89
4.1.18. ThreadLocal
作用(
线程本地存储
)
........................................................90
ThreadLocalMap
(线程的一个属性)
..........................................................................90
使用场景
............................................................................................................91
4.1.19. synchronized
和
ReentrantLock
的区别
.........................................................91
4.1.19.1.
两者的共同点:
......................................................................................................91
4.1.19.2.
两者的不同点:
...........................................................................................................92
4.1.20. ConcurrentHashMap
并发
..............................................................................92
4.1.20.1.
减小锁粒度
....................................................................................................................92
4.1.20.2.
ConcurrentHashMap 分段锁
..........................................................................................................92
ConcurrentHashMap
是由
Segment
数组结构和
HashEntry
数组结构组成
....................93
4.1.21. Java
中用到的线程调度
.............................................................................93
4.1.21.1. 抢占式调度:................................................................................................................93
4.1.21.2. 协同式调度:.................................................................................................................93
4.1.21.3. JVM 的线程调度实现(抢占式调度) .......................................................................94
4.1.21.4. 线程让出 cpu 的情况: ...................................................................................94
4.1.22.
进程调度算法
..............................................................................................94
4.1.22.1. 优先调度算法...............................................................................................................94
4.1.22.2. 高优先权优先调度算法 ..............................................................................................95
4.1.22.3. 基于时间片的轮转调度算法 ................................................................................96
4.1.23.
什么是
CAS
(
比较并交换-乐观锁机制-锁自旋
)
...................................................96
4.1.23.1. 概念及特性.............................................................................................................96
4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋)............................................................97
4.1.23.3. ABA 问题...................................................................................................98
4.1.24.
什么是
AQS
(
抽象的队列同步器
)
..........................................................................98
Exclusive
独占资源
-ReentrantLock
.......................................................................................99
Share
共享资源
-Semaphore/CountDownLatch
.........................................................................99
同步器的实现是
ABS
核心(
state
资源状态计数)
.............................................................100
ReentrantReadWriteLock
实现独占和共享两种方式
............................................100
5. JAVA
基础
...............................................................................................................................101
5.1.1.
JAVA
异常分类及处理
..............................................................................................................101
5.1.1.1.
概念
.........................................................................................................................101
5.1.1.2.
异常分类
..........................................................................................................101
Error
..........................................................................................................................101
Exception
(
RuntimeException、CheckedException
)
.........................................................101
5.1.1.3. 异常的处理方式 ...............................................................................102
遇到问题不进行具体处理,而是继续抛给调用者 (
throw,throws
)
.........................................102
try catch
捕获异常针对性处理方式
..........................................................................................102
5.1.1.4. Throw 和 throws 的区别: ......................................................................102