- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
多线程面试题及答案(实战版)
一、基础概念题(考察理解深度)
问题:线程和进程的核心区别是什么?实际开发中怎么选?
答案:核心区别在资源占用和调度粒度——进程是操作系统资源分配的最小单位(有独立内存空间、文件描述符),线程是CPU调度的最小单位(共享进程资源,仅占少量栈空间)。实际开发中,IO密集型场景(如网络请求、文件读写)用多线程(切换成本低),CPU密集型场景(如复杂计算)用多进程(避免GIL锁限制,充分利用多核);另外,进程间通信需用管道、消息队列等,线程间直接共享内存,更高效但要处理并发安全。
问题:Java中启动线程有几种方式?Runnable和Callable的核心差异是什么?
答案:实际开发中常用两种:①继承Thread类重写run();②实现Runnable接口重写run()。还有间接方式(如通过线程池提交任务),但本质都是基于前两种。Runnable和Callable的核心差异:①返回值:Runnable无返回值,Callable有泛型返回值;②异常:Runnable只能捕获异常,Callable可抛出checked异常;③使用场景:Runnable适合无结果的任务,Callable适合需要获取任务结果的场景(如异步计算),配合Future能获取执行结果。
问题:什么是线程的上下文切换?为什么会影响性能?
答案:上下文切换是CPU从一个线程切换到另一个线程执行时,保存当前线程的执行状态(寄存器、程序计数器、栈指针等),再加载目标线程状态的过程。影响性能的原因:①切换本身有开销(保存/加载状态、内核态与用户态切换);②频繁切换会导致CPU大部分时间花在切换上,而非执行业务逻辑;③破坏CPU缓存局部性,导致缓存命中率下降,进而降低执行效率。
二、并发安全题(考察实操经验)
问题:synchronized和volatile的区别?分别用在什么场景?
答案:核心区别在“原子性”和“可见性/有序性”:
volatile:仅保证可见性(线程修改后立即同步到主内存,其他线程读取必威体育精装版值)和有序性(禁止指令重排),不保证原子性(如i++仍会线程安全问题)。场景:修饰单一共享变量(如状态标记flag、计数器的辅助变量),无需原子操作的场景(如判断线程是否停止)。
synchronized:保证原子性、可见性、有序性(全量保障)。底层是对象锁(监视器锁),可修饰方法、代码块。场景:需要原子操作的场景(如i++、复杂业务逻辑同步),多个共享变量协同操作的场景。
补充:synchronized是重量级锁(JDK1.6后优化了偏向锁、轻量级锁),volatile是轻量级,无锁竞争时volatile效率更高。
问题:线程池的核心参数有哪些?核心线程数和最大线程数怎么设置?
答案:核心参数(ThreadPoolExecutor的构造参数):
参数设置原则:
核心线程数(corePoolSize):线程池常驻核心线程数,即使空闲也不销毁(除非设置allowCoreThreadTimeOut);
最大线程数(maximumPoolSize):线程池能容纳的最大线程数;
空闲线程存活时间(keepAliveTime):非核心线程空闲后的存活时间,超时销毁;
时间单位(unit):keepAliveTime的单位;
任务队列(workQueue):存放等待执行的任务(如ArrayBlockingQueue、LinkedBlockingQueue);
线程工厂(threadFactory):创建线程的工厂(可自定义线程名称、优先级);
拒绝策略(handler):任务队列满且线程数达最大值时的处理方式(如AbortPolicy直接抛异常、CallerRunsPolicy回退到调用线程执行)。
IO密集型(如HTTP请求、数据库操作):核心线程数=CPU核心数*2+1;最大线程数=CPU核心数*10(因线程大部分时间在等待IO,可多开线程提高利用率);
CPU密集型(如计算、排序):核心线程数=CPU核心数+1;最大线程数=CPU核心数*2(避免线程切换开销,充分利用多核);
补充:需结合任务队列长度,避免队列过长导致任务堆积(如用有界队列ArrayBlockingQueue,而非无界的LinkedBlockingQueue)。
问题:什么是死锁?产生死锁的必要条件是什么?怎么避免死锁?
答案:死锁是两个或多个线程互相持有对方需要的锁,且都不释放,导致永久阻塞的状态。
产生条件(缺一不可):①互斥条件(资源只能被一个线程占用);②持有并等待(
您可能关注的文档
- 大华集团招聘笔试题及参考答案.docx
- 大唐集团招聘笔试试题及参考答案.docx
- 大唐科举模拟笔试题库及答案.docx
- 大学C语言考试题库及答案.docx
- 大学PLC课程期末考试试题及答案.docx
- 大学地理课程期末考试试卷及答案.docx
- 大学分析化学期末试卷及参考答案.docx
- 大学公文写作课程期末考试题及参考答案.docx
- 大学化学基础综合试卷及答案.docx
- 大学基础会计期末测试卷及答案.docx
- 2025浙江温州市公用事业发展集团有限公司面向高校招聘工作人考前自测高频考点模拟试题必威体育精装版.docx
- 2025年蓬安县财政局下属单位招聘备考题库附答案.docx
- 广安市农业农村局2025年公开遴选市动物卫生监督所工作人员备考题库附答案.docx
- 南昌市劳动保障事务代理中心招聘3名劳务派遣驾驶员参考题库附答案.docx
- 2025浙江绍兴市新昌县机关事业单位招用编外聘用人员36人备考题库必威体育精装版.docx
- 浙江国企招聘-2025嘉兴海盐县城市投资集团有限公司招聘7人笔试备考试题附答案.docx
- 长沙银行2026校园招聘备考题库必威体育精装版.docx
- 2026年度中国地震局事业单位公开招聘备考题库附答案.docx
- 2025福建省晋江圳源环境科技有限责任公司招聘6人模拟试卷附答案.docx
- 浙江国企招聘-2025温州平阳县城发集团下属房开公司招聘5人公笔试备考试题附答案.docx
有哪些信誉好的足球投注网站
文档评论(0)