概述
1.ThreadPoolExecutor (线程池执行)有哪些常用的方法
(1)执行线程池(submit()/excute())
(2)终止线程池(shutdown())
(3)判断线程是否终止(isShutdown())
(4)获取正在运行的线程数(getAcitiveCount())
(5)获取核心线程数(getCorePoolSize())
(6)获取最大线程数(getMaximunPoolSize())
(7)获取线程池的任务队列(getQueue())
(8)设置空闲时是否回收核心线程(allowCoreThreadTimeOut(boolean))
2.说说submit 和 execute两个方法有什么区别?
submit()和excute都是用来执行线程池的,只不过excute不能有返回方法,而submit可以使用Future接收线程池执行的返回值
3.shutdownNow() 和 shutdown() 两个方法有什么区别?
这两个都是用来终止线程池的,他们的区别是shutdow会等线程池中的缓存任务执行完之后,在终止线程池,而shutdowNow是会试图立马停止任务,如果缓存池中还有任务在执行就会报错,使用shutdown程序就不会报错
4.说说线程池的工作原理
当线程池中有任务需要执行时,线程池会判断如果线程数量没有超过核心线程数量就会新建线程池进行任务执行,如果线程池中的数量已经超过核心线程数,这时候任务就会放到任务队列中等待执行;如果任务队列超过最大队列数,并且线程池没有达到最大线程数,就会新建线程来执行任务;如果超过了最大的线程数,就会执行拒绝策略.
5.线程为什么需要使用阻塞队列
- 因为线程要是没有限制的创建,可能会导致内存占用过多,并且还会造成cpu过度切换
- 创建线程池消耗过高
6.线程池为什么要使用阻塞队列而不使用非阻塞队列?
阻塞队列可以保证任务队列中没有任务执行时,获取任务线程,使得线程进入等待状态,释放cpu资源;当队列中有任务时,唤醒对应线程从队列中获取任务执行,使得线程不至于一直占用cpu资源
7.说说线程池中线程复用原理吗?
线程池将线程和任务解耦,线程是线程,任务是任务,摆脱了之前Thread创建线程时一个线程必须对应一个任务的限制.在线程池中,同一个阻塞队列中不断获取新任务来执行,其核心原理就是线程池对Thread进行封装,并不是每次执行任务都会调用Thread.start()来创建新线程,而是让每个线程去执行"循环任务",在这个"循环任务"中不停的检查是否有任务需要被执行,如果有则直接执行,也就是调用了任务中的run方法,将该方法当成一个普通方法来执行,通过这种方式将只使用固定的线程将所有任务的run方法串联起来.
8.说说线程池创建的几个核心参数的含义
corePoolSize:线程池中的核心线程数
maximunPoolSize:线程池中最大线程数
keepAliveTime:闲置超时时间
unit:闲置超时时间的单位
workQueue:线程池中的任务队列
threadFactory:为线程池提供创建新线程的工厂
rejectExecutionHandler:线程池任务队列超过最大值之后的拒绝策略
9.线程池的应用场景
- 单线程化线程池:只会用唯一的工作线程来执行任务
- 指定工作线程数量线程池:可控制线程最大并发数,超出的线程会在队列中等待
- 可缓存线程池:如果线程池中的数量过大,他可以有效的回收多余的线程,如果线程数量不足,则创建新线程
- 定长线程池:支持定时及周期性任务执行
10.多线程有什么用?创建线程的方式与区别?
- 发挥多核CPU优势
- 防止阻塞
- 继承Thread类
- 实现Runnable接口
- 两者的区别:(1)创建线程的方式不同(2)由于java是单继承,所以实现Runnable接口可以侧面实现多继承,扩展性强
11.多线程应用场景?
多线程就相当于我要去志猛家炒菜吃,想做西红柿炒蛋,跟爆炒花甲,然后用不同的锅(多线程)同时来炒,速度就会比用一个锅(单线程)来炒的要快.本来需要炒完西红柿炒蛋,10min,然后再去炒花甲,10min共花了20min,如果我两个锅同时炒就只用10min.效率就高了
异步处理的时候
举例说明:当用户注册成功后,我要给用户发送一篇欢迎邮件,这时候就可以开启一个新线程发送邮件
Servlet也是多线程的一种(Servlet采用多线程来处理多个请求同时访问,Servlet容器维护了一个线程池来服务请求。)Servlet容器默认采用单实例多线程的方式来处理请求,这样减少产生Servlet实例的开销,提升了对请求的响应时间.
最后
以上就是贪玩过客为你收集整理的线程相关面试题的全部内容,希望文章能够帮你解决线程相关面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复