Java常见面试题(四)
1、线程池有哪四种?
newCachedThreadPool:创建一个可缓存的线程池
newFixedThreadPool:创建固定大小的线程池
newSingleThreadExecutor:创建一个单线程的线程池
newScheduledThreadPool:创建一个大小无限的线程池,用于定时任务
2、提交任务时,如果线程池队列已满,这时会发生什么?
如果是无界队列,则继续添加任务;
如果是有界队列,会先增加线程数量,线程数量达到某一值后,会采取拒绝策略,默认为AbortPolicy
3、线程池队列的拒绝策略有哪些?
AbortPolicy:抛异常
CallerRunsPolicy:由请求者线程直接运行
DiscardPolicy:不理睬提交的任务
DiscardOldestPolicy:丢弃队列中最旧的任务
4、CAS有什么问题?
- ABA问题
- 循环时间长开销大;
- 只能保证一个共享变量的原子操作
5、有哪些线程安全的集合类?
vector、stack、hashtable、enumeratiion
6、Java线程之间的通信方式有哪两种?
共享内存、消息传递
7、编译器和处理器对指令重排序的类型有哪三种?
1)编译器优化的重排序;
2)指令级并行的重排序;
3)内存系统的重排序
8、处理器如何实现原子操作?
1)使用总线锁保证原子性;
2)使用缓存锁保证原子性
9、Java如何实现原子操作?
1)使用循环CAS;
2)使用锁
10、如何安全地终止线程?
1)中断;
2)使用一个布尔变量以控制是否需要停止任务并终止该线程
#Java##面试题目#