Java常见面试题(五)
1、线程池的任务队列有哪四种?
ArrayBlockingQueue:有界阻塞队列
LinkedBlockingQueue:无界阻塞队列
SynchronousQueue:不存储元素的阻塞队列
PriorityBlockingQueue
2、线程中断的原理是什么?
其它线程通过调用该线程的interrupt()对其进行中断
3、线程调度的方式有哪两种?
协同式线程调度、抢占式线程调度
4、线程的暂停/恢复怎么实现?
等待/通知机制
注:不是问“启停”
43、volatile的实现原理?
编译器生成字节码时,在指令序列中插入内存屏障,防止指令重排
44、volatile有什么特点?
原子性、可见性,但不能保证操作的原子性
5、volatile要实现同步怎么做?
volatile===>CAS===>+循环===>原子===>+有序===>锁(同步)
口诀:原子有序即同步
6、如何减少线程的上下文切换?
- 无锁并发编程
- CAS算法
- 使用最少线程和使用协程
7、对象如何延迟初始化?
基于volatile的解决方案、基于类初始化的解决方案
注:不能用双重检查锁定
8、指令重排序的缺点?如何解决?
重排序可能会导致多线程程序出现内存可见性问题。
禁止特定类型的编译器重排序;通过内存屏障指令,禁止特定类型的处理器重排序。如volatile
9、Java堆是否规整由什么决定?
由采用的垃圾收集器是否带有压缩整理功能决定。
10、重载是什么?
方法具备不同的特征签名(不包含方法返回值)
#面试题目##Java#