获取链接:《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