下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaConcurrent并发编程高频面试题及详细答案前言:本文整理互联网初、中级Java开发高频并发面试题,内容贴合实际开发与面试场景,涵盖线程基础、锁机制、JUC工具类、线程池、并发底层原理等核心考点,答案精简实用、适配面试口述及笔试作答,无冗余理论堆砌。一、基础线程面试题1.线程和进程的区别?参考答案:进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位。一个进程内可以包含多个线程,线程共享进程的堆内存、方法区资源,每个线程拥有独立的栈内存和程序计数器。进程之间相互独立,通信成本极高;线程之间共享资源,通信简单、切换开销小。所以线程也被称为轻量级进程,日常开发中使用的多线程,均是同一进程内的线程调度。2.Java线程的生命周期有哪些状态?参考答案:Java线程一共6种状态,均定义在Thread.State枚举中:1.NEW(新建):线程对象创建完成,未调用start()方法,未启动;2.RUNNABLE(可运行):包含就绪和运行两种状态,调用start()后进入该状态,等待CPU调度执行;3.BLOCKED(阻塞):线程等待获取synchronized内置锁,锁被其他线程占用时进入阻塞;6.TERMINATED(终止):线程代码执行完毕或异常退出,生命周期结束。3.start()和run()方法的区别?参考答案:start()是启动线程的核心方法,会告知JVM分配CPU资源,由操作系统调度开启新线程,执行线程的生命周期,只能调用一次,多次调用会抛出非法线程状态异常。run()只是一个普通成员方法,重写后用于定义线程执行逻辑。如果直接调用run(),不会开启新线程,只会在当前主线程中同步执行代码,完全失去多线程的意义。4.sleep、wait、yield、join的区别?参考答案:sleep():Thread静态方法,限时休眠,只让出CPU执行权,不释放锁,时间结束后自动恢复就绪状态;wait():Object方法,必须在同步代码块中使用,主动释放锁和CPU,进入无限等待,需被notify/notifyAll唤醒;yield():Thread静态方法,短暂让出CPU,让同级优先级线程执行,不释放锁,大概率回到就绪状态,效果不稳定;join():让当前主线程阻塞,等待子线程执行完毕后,主线程再继续执行,底层基于wait实现。二、锁机制与线程安全面试题5.什么是线程安全?线程不安全的原因是什么?参考答案:线程安全指多线程同时操作共享资源时,程序运行结果和单线程执行结果一致,不会出现数据错乱、脏数据等问题。线程不安全核心三大原因:共享资源、多线程并发、操作不具备原子性。除此之外,JVM的指令重排、变量可见性问题,也会导致多线程数据异常。6.synchronized和Lock的区别?参考答案:1.底层实现不同:synchronized是JVM内置关键字,底层依赖对象头锁标记;Lock是Java接口,基于代码层面实现锁机制;2.锁释放机制:synchronized自动加锁、自动释放锁,无需手动干预;Lock需要手动lock()加锁、unlock()解锁,必须在finally中释放;3.锁特性不同:synchronized默认是可重入、非公平锁,不可中断;ReentrantLock支持可重入、可公平/非公平切换、可中断、可限时获取锁;4.功能拓展:Lock可以绑定多个条件变量Condition,精准唤醒指定线程,synchronized只能随机唤醒或全部唤醒;5.性能:JDK1.6之后synchronized引入偏向锁、轻量级锁、重量级锁优化,性能基本和Lock持平,低并发场景synchronized更简洁。7.谈谈synchronized的锁升级机制?参考答案:JDK1.6对synchronized做了大量优化,锁会根据竞争情况自动升级,不可逆,顺序为:偏向锁→轻量级锁→重量级锁。偏向锁:无锁竞争场景,默认偏向第一个获取锁的线程,后续该线程重复获取无需再次竞争,效率极高;轻量级锁:出现少量线程竞争,偏向锁失效,升级为轻量级锁,基于CAS自旋尝试获取锁,不阻塞线程;重量级锁:竞争激烈,自旋次数过多,升级为重量级锁,依赖操作系统互斥量,未获取锁的线程直接阻塞,性能最低。8.volatile关键字的作用?能否保证线程安全?参考答案:volatile有两大核心作用:保证变量可见性、禁止指令重排。可见性:一个线程修改volatile变量,会立即刷新到主内存,其他线程能实时感知到最新值;指令重排:禁止编译器和CPU对该变量的读写操作进行指令重排,解决单例模式DCL的空指针问题。不能保证线程安全。volatile不具备原子性,无法解决多线程并发修改的叠加问题,比如i++操作,依旧会出现数据错乱。9.什么是CAS?CAS的优缺点和ABA问题?参考答案:CAS是无锁乐观锁机制,全称比较并交换,核心逻辑:比较内存中的旧值和线程预期值,一致则更新新值,不一致则重试,全程无锁、不阻塞。优点:无锁操作,线程不阻塞,并发性能远高于重量级锁;缺点:自旋重试消耗CPU资源;只能保证单个变量原子性;存在ABA问题;ABA问题:线程A读取变量值为A,线程B将A改为B又改回A,线程ACAS校验通过,但数据已经被修改过。解决方案:使用AtomicStampedReference,增加版本号标记,每次修改更新版本号,规避ABA问题。三、JUC核心工具类面试题10.常见的JUC原子类有哪些?原理是什么?参考答案:常用原子类分为三类:基本类型原子类(AtomicInteger、AtomicLong)、引用类型原子类(AtomicReference)、数组原子类(AtomicIntegerArray)。底层核心原理:CAS+自旋+volatile。通过volatile保证变量可见性,通过CAS无锁自旋实现原子更新,无需加锁即可保证并发安全,性能优于synchronized。11.CountDownLatch、CyclicBarrier、Semaphore的区别?参考答案:CountDownLatch:倒计时计数器,一次性使用。主线程等待多个子线程执行完毕,计数器减为0后主线程唤醒,无法重置复用;CyclicBarrier:循环栅栏,可重复使用。多个线程互相等待,全部到达屏障点后再统一执行后续逻辑,支持重置;Semaphore:信号量,用于控制并发线程数量。可以限制同时执行的线程数,常用于限流、资源抢占场景,支持公平和非公平模式。12.ConcurrentHashMap的底层原理?JDK1.7和1.8区别?参考答案:Concurr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学二年级少先队活动课教学设计:红领巾奖章争章实践与校本课程建设
- 小学三年级道德与法治教学设计:公共场所文明素养的深度培育与实践
- 小学二年级道德与法治下册《玩出新花样》教学设计
- 初中二年级英语Unit 8 Safe and Sound阅读课教学设计
- 小学五年级英语《Unit 7 Shopping smart Grammar time》教学设计
- 高中二年级心理健康教育“面对挫折”主题班会教学设计
- 初中语文七年级散步教学设计-在亲情细节中感悟生命责任
- 九年级地理《建设美丽中国》核心填图专项训练教学设计
- 八年级历史教学设计:第一单元中国开始沦为半殖民地半封建社会知识体系与素养建构
- 九年级数学《与圆有关的位置关系》中考复习教学设计
- 动量守恒定律四大核心类碰撞题型专项训练-2027届高考物理(解析版)
- (2026年秋)九年级数学上册知识点大全(2024修订版)
- 工程工期延误处置方案
- 人工智能:从基础到实践(微课视频版)课件 第3章 语音处理及其应用
- 教育心理学(第4版)课件 第四章 行为主义学习理论
- 住宅小区消防灭火器更换方案
- 2026年学校保安招聘考试题库及答案
- 郑州宇通客车股份公司供应商管理手册
- 沥青混合料施工方案试卷教案(2025-2026学年)
- 伤口护理中的疼痛管理策略与实践
- JJF2061-2023一级标准光伏组件校准规范
评论
0/150
提交评论