Java常见面试题(第五弹)

欢迎关注我的技术公众号:小谢backup

1、线程池的任务队列有哪四种?

ArrayBlockingQueue:有界阻塞队列

LinkedBlockingQueue:无界阻塞队列

SynchronousQueue:不存储元素的阻塞队列

PriorityBlockingQueue


2、线程中断的原理是什么?

其它线程通过调用该线程的interrupt()对其进行中断


3、线程调度的方式有哪两种?

协同式线程调度、抢占式线程调度


4、线程的暂停/恢复怎么实现?

等待/通知机制

注:不是问“启停”


4、volatile的实现原理?

编译器生成字节码时,在指令序列中插入内存屏障,防止指令重排


5、volatile有什么特点?

原子性、可见性,但不能保证操作的原子性


6、volatile要实现同步怎么做?

volatile===>CAS===>+循环===>原子===>+有序===>锁(同步)

口诀:原子有序即同步


7、如何减少线程的上下文切换?

无锁并发编程
CAS算法
使用最少线程和使用协程

 

8、对象如何延迟初始化?

基于volatile的解决方案、基于类初始化的解决方案

注:不能用双重检查锁定


9、指令重排序的缺点?如何解决?

重排序可能会导致多线程程序出现内存可见性问题。

禁止特定类型的编译器重排序;通过内存屏障指令,禁止特定类型的处理器重排序。如volatile


10、Java堆是否规整由什么决定?

由采用的垃圾收集器是否带有压缩整理功能决定。


11、重载是什么?

方法具备不同的特征签名(不包含方法返回值)

posted @ 2021-05-18 22:34  小谢backup  阅读(43)  评论(0)    收藏  举报