- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
并发编程面试题及答案
一、基础核心题(共5题)
问题:Java中Runnable和Callable的核心区别是什么?实际开发中什么时候选Callable?
答案:核心区别有两点:一是Runnable接口的run()方法无返回值、不能抛出受检异常;Callable的call()方法有返回值(泛型)、可抛出受检异常。二是Callable能通过Future或FutureTask获取任务执行结果,Runnable无法直接获取结果。实际开发中,当需要获取异步任务的执行结果(比如异步计算数据、批量处理后返回统计结果)或需要捕获任务执行中的特定异常时,选Callable;如果只是单纯执行一段无返回值的逻辑(比如后台日志打印、定时清理缓存),用Runnable更简洁。
问题:synchronized和ReentrantLock都能实现锁机制,说说它们的适用场景差异?
答案:synchronized是JVM层面的隐式锁,优点是简单易用、无需手动释放,自动实现可重入,适合锁竞争不激烈、逻辑简单的场景(比如单例模式的实例初始化、简单方法同步),且JVM会对其进行优化(偏向锁、轻量级锁、重量级锁升级)。ReentrantLock是API层面的显式锁,需要手动lock()和unlock()(通常在try-finally中),支持公平锁/非公平锁选择、可中断锁、条件变量(Condition)、尝试获取锁(tryLock()),适合锁竞争激烈、需要灵活控制锁的场景(比如生产消费者模型、需要超时释放锁的场景、多条件等待的场景)。另外,ReentrantLock能通过getHoldCount()等方法获取锁状态,便于调试,而synchronized无法直接获取。
问题:什么是线程安全?ArrayList为什么不是线程安全的?如何让ArrayList变得线程安全?
答案:线程安全指多个线程同时操作同一个对象时,不会出现数据不一致、逻辑错乱等异常结果(比如数据丢失、重复、脏读)。ArrayList不是线程安全的,核心原因是其add()方法没有同步机制:当多个线程同时往ArrayList中添加元素时,会出现“数组扩容时的并发修改”或“元素赋值时的覆盖”问题(比如size变量的自增操作是非原子的,可能导致多个线程同时写入同一个索引位置)。让ArrayList变得线程安全的常见方式有三种:①使用Collections.synchronizedList(newArrayList())(底层是给ArrayList的所有方法加了synchronized锁,简单但效率低);②使用CopyOnWriteArrayList(底层是“写时复制”,读操作无锁,写操作会复制一份新数组,适合读多写少的场景,但存在数据一致性延迟);③手动加锁(比如用ReentrantLock包裹ArrayList的操作,灵活但需注意锁的粒度)。
问题:线程池的核心参数有哪些?如果核心线程数是5,最大线程数是10,队列容量是3,当有15个任务提交时,会发生什么?
答案:线程池的核心参数(以ThreadPoolExecutor为例)有7个:核心线程数(corePoolSize)、最大线程数(maximumPoolSize)、空闲线程存活时间(keepAliveTime)、存活时间单位(unit)、任务队列(workQueue)、线程工厂(threadFactory)、拒绝策略(handler)。当核心线程数5、最大线程数10、队列容量3时,15个任务的处理流程如下:①前5个任务提交时,线程池创建核心线程直接执行;②第6-8个任务提交时,核心线程已占满,任务进入队列等待;③第9-13个任务提交时,队列已满,线程池创建非核心线程(最多到10个线程)执行,此时10个线程都在运行,队列里有3个任务;④第14-15个任务提交时,线程数已达最大(10),队列也满(3),触发拒绝策略。默认拒绝策略是AbortPolicy,会直接抛出RejectedExecutionException异常;其他拒绝策略还包括CallerRunsPolicy(由提交任务的线程自己执行)、DiscardPolicy(直接丢弃任务)、DiscardOldestPolicy(丢弃队列中最旧的任务,加入新任务)。
问题:什么是CAS?CAS有什么缺点?
答案:CAS(CompareandSwap,比较并交换)是一种无锁原子操作,核心逻辑是:通过硬件指令保证“比较内存值V和预期值A,如果相等则将
您可能关注的文档
- 常见公文写作范例试题及答案.docx
- 常见面试题及真实应答思路.docx
- 常用SQL语句面试题及答案(实战版).docx
- 常用公文写作能力测试题及参考答案.docx
- 常州市中考物理模拟试卷及答案.docx
- 干部选拔笔试题及参考答案.docx
- 干部选拔综合能力测试卷及参考答案.docx
- 平安IQ测试题(含答案及解析).docx
- 平安IQ测试题(生活化版).docx
- 平安保险从业资格考试真题及答案解析.docx
- 浙江省温州市浙南名校联盟2025-2026学年高一上学期期中联考数学试题含解析.docx
- 26高考数学提分秘诀重难点34圆锥曲线中的定点、定值、定直线问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点35概率与统计的综合问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点31圆锥曲线中的切线与切点弦问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点30圆锥曲线中的弦长问题与长度和、差、商、积问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点29巧解圆锥曲线的离心率问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点28直线与圆的综合(举一反三专项训练)(全国通用)(含解析).docx
- 寡核苷酸药物重复给药毒性研究技术指南.docx
- 重组溶瘤腺病毒生产质量管理标准.docx
- 26高考数学提分秘诀重难点27直线与圆中常考的最值与范围问题(举一反三专项训练)(全国通用)(含解析).docx
原创力文档


文档评论(0)